是否可以在档案页面添加查询参数?

时间:2015-06-03 作者:user1452062

我有一个自定义的帖子类型“Works”,还有一个归档页面“archive Works”。php’。我想在归档页面中隐藏非公开帖子,所以我添加了一个自定义元框。

我还修改了查询,以便在public\\u s不是0时仅列出帖子:

$args = array(
    \'meta_key\'     => \'public_s\',
    \'meta_value\'   => \'0\',
    \'meta_compare\' => \'!=\'
);
$queryWorks = new WP_Query( $args );

if ( $queryWorks->have_posts() ) : while ( $queryWorks->have_posts() ) : $queryWorks->the_post();
由于某些原因,查询不起作用。

var_dump($queryWorks->the_post()); -> NULL
查询有什么问题?

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

正如@s\\u ha\\u dum已经指出的,发布帖子时可以使用内置的私有帖子状态功能。这将对所有注销的用户隐藏这些帖子。

由于您已经选择了自定义字段路径,因此可以对自定义帖子类型存档进行以下更改

删除自定义查询。这会弄乱页面功能和分页。我写过an answer 不久前关于在何处使用自定义查询以及在何处不使用自定义查询

使用pre_get_posts 如我的链接帖子所述,相应地修改主查询。这将解决您的所有问题。

NOTE: 默认情况下post_type 使用人:WP_Querypost. 你可能没有适合你查询的默认帖子,这就是为什么你没有得到任何帖子

您需要在函数中执行类似的操作。恢复到post type archive页面中的默认循环后的php:

NOTE: 仅示例代码,根据需要进行调整。需要PHP 5.3+)

add_action( \'pre_get_posts\', function ( $q ) 
{
    if ( !is_admin() // VERY important, targets only front end queries
         && $q->is_main_query() // VERY important, targets only main query
         && $q->is_post_type_archive( \'YOUR_POST_TYPE_NAME\' ) 
         // Which post type archive page to target.
         // for example: && $q->is_post_type_archive( \'works\' )
    ) {
        $q->set( \'meta_key\', \'META_KEY_NAME\' ); 
        //for example: $q->set( \'post_status\', \'publish\' );
        $q->set( \'meta_value\', \'META_VALUE_VALUE\');
        // Rest of your arguments to set
    }
});

结束