无法检查帖子是否有缩略图将过滤器添加到GET_POST_METADATA()

时间:2020-01-17 作者:stckvrw

我需要设置假缩略图,以所有职位还没有缩略图。我使用链接中的代码core.trac.wordpress.org/ticket/40547#comment:1

但我无法检查一篇文章中提到的第一个函数是否已经有缩略图。

如果我尝试has_post_thumbnail() 那就是

function wp40547_filter_post_thumbnail_id( $null, $post_id, $meta_key, $single ) {
    if ( \'_thumbnail_id\' !== $meta_key ) {
        return $null;
    }
    if( has_post_thumbnail( $post_id ) == false) {
        $attachment_id = \'my_fake_id\';
    }
    return $attachment_id;
}
add_filter( \'get_post_metadata\', \'wp40547_filter_post_thumbnail_id\', 10, 4 );
我收到502错误,我可以理解,因为has_post_thumbnail() 调用get_post_thumbnail_id() 依次调用get_post_meta() 以及get_post_metadata() 所以我们称自己

如何检查案例?

1 个回复
SO网友:WebElaine

选项1:在所有帖子上强制使用特色图片

使用save_post 钩子,如果启用了修订,则每次“保存”操作都会运行两次。您可以通过检查$_POST 数据(第一次是空的)。

add_action(\'save_post\', \'wpse_force_featured_image\', 20, 2);
function wpse_force_featured_image($post_id, $post) {
    // If this is a "Post" and $_POST data is present
    if(count($_POST) > 0 && $post->post_type == \'post\') {
        // Check if featured image is missing
        if(!isset($_POST[\'_thumbnail_id\'])) {
            // Add your desired fallback featured image
            add_post_meta($post_id, \'_thumbnail_id\', \'my_fake_id\');
        }
    }
}
您必须确保ID是媒体库中的真实图像。此外,这只适用于新帖子,以及添加代码后更新的帖子。任何旧帖子都必须逐个更新。

选项2:更新主题以包括回退

无论您在主题中使用特色图像的何处,都可以添加一个备用图像。例如,如果single-post.php 你有点像

if(has_post_thumbnail()) {
    the_post_thumbnail();
}
您可以将此更改为

if(has_post_thumbnail()) {
    the_post_thumbnail();
} else {
    echo \'<img src="image_url.jpg" alt="alt text" />\';
}
好处是,这将立即为所有帖子添加一个回退—您不必返回并更新帖子或添加新帖子即可看到这一点。(如果您还没有子主题或自定义主题,则需要创建一个,以便不编辑父主题文件。)

相关推荐

如何输出所有的Apply_Filters和Do_action?

我想输出所有apply\\u过滤器和do\\u操作,以向用户提供它们的概述。如果我使用代码add_filter( \'wpErpOs_testFilter\', \'wpErpOs_testFilter_callback\', 10, 1 ); function wpErpOs_testFilter_callback( $testVar ) { $testVar[] = \"GM\"; return $testVar; } $testVar = array(\"V