在自定义帖子类型查询中显示当前用户帖子

时间:2017-10-22 作者:Shaun

我有一个名为\'saved-orders\', 我想编辑主查询,以便当前登录的用户只看到他们的帖子。

我已将此添加到functions.php 但它仍然显示所有用户的帖子:

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

function custom_query_vars( $query ) {


  global $current_user;  

  if (!is_admin() && $query->is_main_query()) {
    if ( get_post_type() == \'saved-orders\' ) {
      $query->set( \'author\' => $current_user->ID );
    }

  }
  return $query;
}
谁能帮帮我吗?

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

这里有两个基本问题:

问题1

pre_get_posts 允许您在查询发生之前对其进行修改,在本例中,您是在主查询发生之前对其进行修改。

但你要这样做:

if ( get_post_type() == \'saved-orders\' ) {
get_post_type 这里不应该工作,因为现在太早了,主查询还没有发生。相反,让我们询问查询对象:

if ( \'saved-orders\' === query->get( \'post_type\' ) {
问题2这是一个语法错误,PHP无效:

$query->set( \'author\' => $current_user->ID );
=> 仅在两种情况下使用:

array(
    \'key\' => \'value\'
)
以及

for ( $array as $key => $value )
它们都不是函数调用。调用set 方法是:

$query->set( \'queryvar\', $new_value );
有了一些初级PHP知识,您现在应该能够修复过滤器了。

结束