有几种不同的方法可以实现这一点。
最明显的一个是使用两个现有的图像字段-您是否已经使用了标题、标题、替换文本和描述?如果没有,这些都是可用的,您可以简单地向模板中添加一些代码,使用(比如)标题作为链接,使用描述作为源代码。
如果这看起来很混乱,或者您已经在使用图像字段,那么您也可以使用插件将类别提供给媒体项目。我最近成功地使用了这个:https://wordpress.org/plugins/wp-media-library-categories/
通过添加几行代码,您可以将图像类别与普通帖子类别分开存储:
/**
* separate media categories from post categories
* use a custom category called \'category_media\' for the categories in the media library
*/
add_filter( \'wpmediacategory_taxonomy\', function(){ return \'category_media\'; } );
通过这种方式,您可以将源存储为媒体类别,将URL放在类别描述字段中。这种方法的优点是,您可以在不更改单个图像数据的情况下全局更改源URL。
希望这有帮助。
EDIT
功能。您发现的php挂钩工作正常。要输出它存储的值,只需将图像的ID连同存储值的键一起传递给get\\u post\\u元函数。在下面的片段中,我假设图像是当前帖子的缩略图。
$source_url = get_post_meta(get_post_thumbnail_id(get_the_ID()),\'_wp_attachment_source_url\', true);
$source_name = get_post_meta(get_post_thumbnail_id(get_the_ID()),\'_wp_attachment_source_name\', true); ?>
<a href="<?php echo $source_url; ?>"><?php echo $source_name; ?></a>
如果你有什么困难,请告诉我。
EDIT 2
为了响应原始海报的请求,这里有一个过滤器,用于将新存储的源信息合并到通过WordPress编辑器插入的图像中。此函数和过滤器需要放在函数中。php文件。这将检查链接和源名称是否都存在。如果这样做,它将输出一个换行符和到源的链接,并在新窗口中打开。
function image_add_caption_with_source( $html, $id, $caption, $title, $align, $url, $size, $alt = \'\' ) {
/**
* Filters the caption text and adds source info.
*
* Note: If the caption text is empty, the caption shortcode will not be appended
* to the image HTML when inserted into the editor.
*
* Passing an empty value also prevents the {@see \'image_add_caption_shortcode\'}
* Filters from being evaluated at the end of image_add_caption().
*
* @since 4.1.0
*
* @param string $caption The original caption text.
* @param int $id The attachment ID.
*/
$caption = apply_filters( \'image_add_caption_text\', $caption, $id );
$source_url = get_post_meta($id,\'_wp_attachment_source_url\', true);
$source_name = get_post_meta($id,\'_wp_attachment_source_name\', true);
/**
* Filters whether to disable captions.
*
* Prevents image captions from being appended to image HTML when inserted into the editor.
*
* @since 2.6.0
*
* @param bool $bool Whether to disable appending captions. Returning true to the filter
* will disable captions. Default empty string.
*/
if ( empty($caption) || apply_filters( \'disable_captions\', \'\' ) )
return $html;
$id = ( 0 < (int) $id ) ? \'attachment_\' . $id : \'\';
if ( ! preg_match( \'/width=["\\\']([0-9]+)/\', $html, $matches ) )
return $html;
$width = $matches[1];
$caption = str_replace( array("\\r\\n", "\\r"), "\\n", $caption);
$caption = preg_replace_callback( \'/<[a-zA-Z0-9]+(?: [^<>]+>)*/\', \'_cleanup_image_add_caption\', $caption );
// Convert any remaining line breaks to <br>.
$caption = preg_replace( \'/[ \\n\\t]*\\n[ \\t]*/\', \'<br />\', $caption );
$html = preg_replace( \'/(class=["\\\'][^\\\'"]*)align(none|left|right|center)\\s?/\', \'$1\', $html );
if($source_url && $source_name):
$source =\'<br /><a target="_blank" href="\'.$source_url.\'">\'.$source_name.\'</a>\';
else:
$source = "";
endif;
if ( empty($align) )
$align = \'none\';
$shcode = \'[caption id="\' . $id . \'" align="align\' . $align . \'" width="\' . $width . \'"]\' . $html . \' \' . $caption . $source . \'[/caption]\';
/**
* Filters the image HTML markup including the caption shortcode.
*
* @since 2.6.0
*
* @param string $shcode The image HTML markup with caption shortcode.
* @param string $html The image HTML markup.
*/
return apply_filters( \'image_add_caption_shortcode\', $shcode, $html );
}
// remove the existing filter
remove_filter( \'image_send_to_editor\', \'image_add_caption\', 20, 8 );
// add the new filter
add_filter( \'image_send_to_editor\', \'image_add_caption_with_source\', 20, 8 );