我试图根据页面模板在管理区域中不显示某些帖子。以下是我目前掌握的情况:
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
但我怎样才能使它只适用于包含。我想不包括基于模板的页面。
有什么办法吗?
谢谢
最合适的回答,由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 您可以阅读有关自定义字段参数的更多信息。