按类别显示包含当前标记的帖子

时间:2015-05-26 20:28:04

标签: php wordpress

我正在创建一个与当前帖子具有相同标签的帖子列表(这是在单帖模板中)。我需要显示按类别组织的帖子,类别名称一次显示为标题。所以最终的结果就是:

CATEGORY1
POST1
POST2
POST3
CATEGORY2
POST4
POST5
POST6

等...所有帖子与当前帖子具有相同的标签,按类别组织,类别名称显示一次。 (具有此标记的所有帖子将仅属于一个类别。当前帖子将只有一个标记。)由于模板上的其他循环,这需要使用WP_Query。我的PHP技能很少 - 我花了几天时间寻找解决方案,并找到了有用的点点滴滴,但我无法解决这个问题。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要获取当前的帖子标签以及与这些标签相关联的所有帖子。这可以按照以下方式完成,

  global $post;

  $tags = wp_get_post_tags(get_the_ID());

  if ($tags) {

                $tag_list = wp_get_object_terms(get_the_ID(),'post_tag',array('fields' => 'ids'));

                $post_args = array(
                    'orderby' => 'post_date',
                    'order' => 'DESC',
                    'post_type' => 'post',
                    'post_status' => 'publish',
                    'posts_per_page' => 5,          
                    'post__not_in' => array( $post->ID ),
                    'tag__in' => $tag_list
                );

      $get_recent_posts = get_posts($post_args);

   }//if ends - tags present

这将获取5个最近的帖子,不包括当前帖子。

我们可以在上面的块中包含以下代码,按类别对帖子进行排序,如下所示,

    $post_arr = array();

    foreach($get_recent_posts as $recent_post)
    {
        $post_id = $recent_post->ID;

        $category_id_list = wp_get_post_categories($post_id);

        $current_category_id = current($category_id_list);

        if(array_key_exists($current_category_id,$post_arr))
        {

            array_push($post_arr[$current_category_id],$post_id);
        }
        else
        {
            $post_arr[$current_category_id] = array($post_id);
        }
    }

这将生成如下输出

 Array
 (
   [69] => Array
    (
        [0] => 135
    )

    [70] => Array
    (
        [0] => 140
        [1] => 8
    )

  )

喜欢,类别ID为'键' &安培;所有其他相关的帖子ID作为其元素。