我正在创建一个与当前帖子具有相同标签的帖子列表(这是在单帖模板中)。我需要显示按类别组织的帖子,类别名称一次显示为标题。所以最终的结果就是:
CATEGORY1
POST1
POST2
POST3
CATEGORY2
POST4
POST5
POST6
等...所有帖子与当前帖子具有相同的标签,按类别组织,类别名称显示一次。 (具有此标记的所有帖子将仅属于一个类别。当前帖子将只有一个标记。)由于模板上的其他循环,这需要使用WP_Query。我的PHP技能很少 - 我花了几天时间寻找解决方案,并找到了有用的点点滴滴,但我无法解决这个问题。非常感谢任何帮助。
答案 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作为其元素。