从直接URL获取特色图片的WordPress钩子?

时间:2016-03-13 作者:Aurora A

我在我的网站上使用了很多插件,所以我正在尽量减少插件的数量。

我想知道有没有wordpress的钩子use so that I can use an image that is hosted on imageshack and use that as a featured image <没有将图像保存在我的wordpress网站上?

这可能吗?这听起来是一个非常复杂的请求。英雄联盟

1 个回复
SO网友:iantsch

第一次尝试:一个不好的尝试过这个吗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}\'>"

相关推荐

wordpress hooks

我目前正在使用woocommerce主题,Hotel(https://woocommerce.com/products/hotel/).我最近刚刚创建了一个主页和一个博客页面,其解释方式如下:https://www.wpbeginner.com/wp-tutorials/how-to-create-a-separate-page-for-blog-posts-in-wordpress/现在我想做的是:创建一个带有固定元素的主页,这些元素永远不会改变(如照片),然后添加一些动态元素(如博客中的帖子)……假设