模板不等于指定模板的预取帖子?

时间:2019-04-18 作者:Best Dev Tutorials

我试图根据页面模板在管理区域中不显示某些帖子。以下是我目前掌握的情况:

add_filter( \'parse_query\', \'hide_some_posts\' );

function hide_some_posts( $query ) {
    global $pagenow;
    $myHiddenPosts = array(\'10667\');
    if ( is_admin() && $pagenow==\'edit.php\') {
       $query->set( \'post__not_in\', $myHiddenPosts );
    }
}
这在页面ID的基础上工作得很好,但我希望改为基于页面模板。我遇到了这样一个问题:

    $query->set(\'meta_key\',\'_wp_page_template\');
    $query->set(\'meta_value\', \'page-some-template.php\'); //Change filename to yours
但我怎样才能使它只适用于包含。我想不包括基于模板的页面。

有什么办法吗?

谢谢

1 个回复
最合适的回答,由SO网友:nmr 整理而成

您应该使用meta_query 传递元查询参数。

add_action(\'parse_query\', \'se334731_filter_admin_post_list\');

function se334731_filter_admin_post_list( $query )
{
    $screen = get_current_screen();
    if ( is_admin()  && $screen->post_type == \'page\'  && $screen->base == \'edit\' )
    {
        $query->query_vars[\'meta_query\'][] = [
            \'relation\' => \'OR\',
            [
                \'key\' => \'_wp_page_template\',
                \'value\'    => \'page-some-template.php\',
                \'compare\'  => \'!=\',
                //\'value\'    => array( \'page-some-template.php\' ),
                //\'compare\'  => \'NOT IN\'
            ],
            [
                \'key\' => \'_wp_page_template\',
                \'compare\'  => \'NOT EXISTS\'
            ],
        ];
    }
}
这些更改不会影响上表中帖子数量的汇总(所有帖子、已发布帖子、垃圾帖子)。要更正显示的帖子数量,请使用wp_count_posts 滤器

Here 您可以阅读有关自定义字段参数的更多信息。

相关推荐