我怎么才能隐藏所有没有缩略图的帖子?

时间:2017-07-12 作者:Dany M

我想阻止没有缩略图的帖子显示在主页、分类页、归档文件等上。

使用类似

if (get_the_post_thumbnail_url() != "") {
    //don\'t insert post
}
我应该使用什么过滤器/挂钩?

2 个回复
SO网友:hwl

我应该使用什么过滤器/挂钩?

您可以使用pre_get_posts 行动挂钩。

下列的Tom\'s 对有关查询所需内容的问题进行评论,可能设置meta_query_thumbnail_id.

我也会() 要阅读的条件:

不是admin,是主查询,是home、category或archive

add_action( \'pre_get_posts\', \'thumbnails_only\' );

function thumbnails_only( $query ) {
    if ( ( ! $query->is_admin && $query->is_main_query() ) && ( $query->is_home() || $query->is_category() || $query->is_archive() ) ) {

    $meta_query = array(
                array(
                    \'key\' => \'_thumbnail_id\',
                )
            );

    $query->set( \'meta_query\', $meta_query );
   }
}
可能要替换is_home() 具有is_front_page() depending on your site settings.

SO网友:Johansson

你要的东西可能很贵。除非运行查询,否则无法检查帖子是否有缩略图。之后,如果将其从已执行的查询中排除,则会影响分页。

您可以做的是运行一次查询(在主查询运行之前),但不要使用它输出任何内容。然后,在该特定查询中搜索没有缩略图的帖子,将其ID保存到数组中,并将其从主查询中排除。

add_action( \'pre_get_posts\', \'exclude_no_thumbnails\' );
function exclude_no_thumbnails( $query ) {
    // Check if we are on the main query
    if (!is_admin() && ( $query->is_main_query() && $query->is_archive() ) ){
        remove_action( \'pre_get_posts\', \'exclude_no_thumbnails\' );
        // Get a list of the posts in the query
        $posts = get_posts( $query->query );
        // Create an empty array to save the IDs of posts without a thumbnail
        $ids = array();
        // Run a loop and check the thumbnails
        foreach ($posts as $post){
            if(!has_post_thumbnail($post->ID)){
                $ids[] = $post->ID;
            }
        }
        // Now time to exclude these posts from the query
        $query->set( \'post__not_in\', $ids );
    }
}
这可能需要额外的查询。缓存可以节省您的时间。

结束

相关推荐

Apply_Filters(‘the_content’)-是否使其忽略快捷代码?

我正在使用apply_filters(\'the_content) 因此,我可以在后端的wp编辑器中看到格式正确的内容。但是,这也会呈现内容中的短代码。我希望它忽略短代码,对其余内容进行过滤,基本上与发帖时一样。如果您在后端查看帖子内容,您将看到短代码,但如果您在网站的页面内查看它,您将看到呈现的短代码(其结果)。这可能吗?