Wordpress Walker类 - 分层线程自定义帖子类型

时间:2017-01-03 21:29:51

标签: php wordpress

我想要实现的目标:

主题(1)

回复1(2)

- 回复2(3)

- 回复2(4)

----回复4(5)

----回复4(6)

回复主题1(7)

----回复6(7)

------回复7(8)

---回复8(9)

------回复8(10)

我现在拥有的更像是

主题(1)

回复1(2)

回复2(3)

回复4(5)

回复7(6)

回复6(7)

回复4(8)

回复8(9)

回复主题1(10)

回复8(11)

回复2(12)

以上是我使用Wordpress和bbPress构建的论坛的示例结构。主题和回复都是自定义帖子类型。我能够显示回复正确的主题,但我希望在嵌套/线程视图中对它们进行排序。我希望它们显示为嵌套在作为父级的回复之下,而不是简单地使回复全部按日期或ID的顺序显示。

我希望这是有道理的。基本上它就像facebook那样是主题和回复。

下面是我的args和查询回复,它位于主题WP_Query循环中。

            $args = array(
                'post_type'         => 'reply', // custom post type
                'posts_per_page'    => '50',
                'orderby'       => 'post_parent',
                'post_parent'       => $topic_id,

                 'meta_query' => array(
                     'relation' => 'OR',
                     array(
                       'key'=> $topic_id,
                    ),
                    array(
                       'key'=>'_bbp_reply_to',
                       'compare' => 'NOT EXISTS'
                   ),
                     array(
                         'key'=>'_bbp_reply_to',
                         'compare' => 'EXISTS',
                     ),
                 ),
                'orderby' => 'meta_value_num',
                 'order' => 'ASC',
            );

                //global $wpdb;

            $loopReply = new WP_Query($args);

我希望这不太清楚。我发现了关于wordpress postmeta排序的其他近距离问题,但这是一个奇怪的问题。您会看到元键_bbp_reply_to仅显示是否是对回复的回复。如果它是对主题的回复,则不会发生。这就是为什么我“想”我需要数组键存在的args部分。

简短

需要一组$ args,如果可能的话做嵌套回复。或者我是否必须使用自己的手动sql来实现此目的?

编辑:看我的评论。我改变了标题,因为我相信实现这一点,自定义Wordpress Walker类实现可能就是解决方案。

1 个答案:

答案 0 :(得分:0)

我找到了一个效果很好的解决方案。我最终复制了bbPress Reply Walker类,它是WordPress walker类的扩展,并修改了一些参数以满足我的需求。我还必须自己创建列出回复的功能,类似于bbPress的列表回复功能。列表回复函数有自定义args如下:

                $args = array(
                    'post_type'           => 'reply',                   
                    'post_parent'         => $postID,                   
                    'posts_per_page'      => 50,                        
                    'orderby'             => 'date',                        
                    'order'               => 'ASC',                         
                    'hierarchical'        => true,
                    'ignore_sticky_posts' => true,                          
                )