WordPress 4.0 - 在自定义帖子类型上显示作者的内容

时间:2014-09-15 22:35:26

标签: wordpress plugins custom-post-type

这是我的问题。

  • 我有几个允许发布内容的用户。
  • 我创建了一个自定义帖子类型,用于个人页面。
  • 我为每个用户创建了一个新的自定义帖子。
  • 他们可以使用主题Flawless提供的工具在此自定义帖子上发布媒体,活动,帖子....

Flawless工具默认发布所有内容,因此如果您想添加图库,它将显示所有用户的所有图库。我想将图库显示限制为仅自定义帖子的当前作者。对于用户可能想要添加到他的页面的所有类型的内容也是如此。 我的理解是pre_get_posts在这种情况下是完美的。

我们的目标是在自定义帖子上发布他们的内容,因此我使用了pre_get_posts动作来执行此功能:

function only_current_author( $query ) {   

    if ( !is_admin() && $query->query_vars['post_type'] != 'nav_menu_item' ) {  
        $post_id = get_queried_object_id();
        $author_id = get_post_field( 'post_author', $post_id );
        $query->query_vars['author'] = "$author_id";
    }

}
add_action( 'pre_get_posts', 'only_current_author' );

这在使用WordPress 3.9的本地主机上工作正常

现在我已更新到WordPress 4.0,我收到错误404.

我不明白究竟是什么导致了这个问题,两个WordPress版本有什么不同,但我认为这是导致错误404的原因是我无法获得作者ID当前的自定义帖子。

所以,我想知道,你知道在pre_get_posts行动中定义作者身份的替代方案吗? 或者我应该使用其他方法来过滤将要显示的内容?
我尝试了几种替代方法,例如添加额外的查询或在我的自定义模板中的模板中添加$query->query_vars,但都没有效果。
我尝试使用$query中找到的自定义帖子的名称来获取作者ID,似乎没有任何效果。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

所以,经过一夜好眠,我回到我的问题并找到了解决方案。 如果您认为此解决方案合适,请给我您的反馈意见。

function only_current_author( $query ) {   

    if ( !is_admin() && $query->query_vars['post_type'] != 'nav_menu_item' ) {  

        global $wp_query;
        $post_id = $wp_query->post->ID;
        $post_type = $wp_query->post->post_type;    

        if( $post_id != 0 && $post_type == 'cpt_mdj' ) {

            $post_author_id = get_post_field( 'post_author', $post_id );
            $query->query_vars['author'] = $post_author_id;

        }

    }

}
add_action( 'pre_get_posts', 'only_current_author' );

因此,问题是$post_id = get_queried_object_id();返回null,因为不可能使用作者ID预先过滤查询。 使用$ wp_query,我能够获得帖子ID,然后是作者ID。

附带问题,$ query和$ wp_query之间的区别是什么,它们在我var_dump时是相同的,但给出了不同的结果。

谢谢!