第一次尝试:一个不好的尝试过这个吗solution? 通过一些调整,它应该也适用于您的问题。
第二次尝试:真正的方法和解决方案
如果您想使用基于URL的特色图像,而不在WordPress安装中保存图像文件,但仍在主题/插件中使用已实现的WordPress功能,则需要了解WP中媒体的表示方式:
上载文件时,WordPress不会使用其URL引用图像或文件,而是使用附件。附件是类型为attachment的帖子,由其帖子ID引用。例如,当您在帖子上设置特色图像时,它会将所选图像的帖子ID存储在该帖子的元数据中_thumbnail_id
.
资料来源:http://www.wptherightway.org/en/post_types/index.html (2016-03-14 01:23 UTC)
Conclusion: WP环境中无法预见基于URL的特色图像。
如果您仍想实现这一目标,有三个简单的步骤:
过滤wp_get_attachment_image_src()
结果,允许url字符串作为_thumbnail_id
而不是post_id
.
function my_get_attachment_image_src($image, $attachment_id, $size, $icon){
if (empty($attachment_id)) return $image;
if (
(string) intval($attachment_id) != (string) $attachment_id &&
$attachment_id != \'\'
) {
$image[0]= $attachment_id;
}
return $image;
}
add_filter( \'wp_get_attachment_image_src\', \'my_get_attachment_image_src\', 10, 4);
为帖子和页面创建一个额外的元框,以显示和设置基于URL的特色图像。
function add_my_meta_box() {
add_meta_box(
\'post_thumbnail_url\',
__(\'External URL as featured Image\'),
\'my_meta_box\',
\'post\',
\'side\',
\'low\'
);
add_meta_box(
\'page_thumbnail_url\',
__(\'External URL as featured Image\'),
\'my_meta_box\',
\'page\',
\'side\',
\'low\'
);
}
function my_meta_box($post) {
$attachment_url = get_the_post_thumbnail_url($post->ID);
if (
(string) intval($attachment_url) != (string) $attachment_url &&
$attachment_url != \'\'
) {
echo "<img width=\'100%\' id=\'my_thumbnail_preview\' src=\'{$attachment_url}\'>";
}
$placeholder = __(\'e.g. http://foo.bar/image.jpg\');
echo "<input type=\'text\' placeholder=\'{$placeholder}\' name=\'my_thumbnail_url\' id=\'my_thumbnail_url\' value=\'{$attachment_url}\'>";
}
add_action( \'add_meta_boxes\', \'add_my_meta_box\');
添加
save_post
用于处理post meta的筛选器
_thumbnail_id
(=特色图片ID/URL)。
function save_my_thumbnail_url($post_id) {
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
if ( !current_user_can( \'edit_post\', $post_id ) )
return;
if ($_POST[\'my_thumbnail_url\'] && !empty($_POST[\'my_thumbnail_url\'])) {
update_post_meta($post_id, \'_thumbnail_id\', $_POST[\'my_thumbnail_url\']);
}
//TODO: Handle empty featured image url.
}
add_action( \'save_post\', \'save_my_thumbnail_url\', 99);
现在,您可以在主题中使用基于URL的特色图像。
the_post_thumbnail();
// or…
$image_url = get_the_post_thumbnail_url(get_the_ID());
echo "<img src=\'{$image_url}\'>"