2015-05-26 2 views
1

Я создаю список сообщений, которые имеют те же теги, что и текущая публикация (это шаблон для одной публикации). Мне нужно отображать те сообщения, упорядоченные по категориям, причем имя категории появляется один раз в заголовке. Таким образом, конечный результат будет просто:Показать сообщения с текущим тегом по категориям

category1
POST1
POST2
POST3
category2
POST4
POST5
POST6

и т.д ... Все сообщения, имеющие один и тот же тег в качестве текущее сообщение, организованное по категориям, с отображением названия категории. (Все сообщения, имеющие этот тег, относятся только к одной категории. В текущем столбце будет только один тег.) Из-за других циклов в шаблоне это нужно использовать WP_Query. Мои навыки PHP минимальны - я потратил несколько дней на поиск решения и нашел полезные кусочки, но я не смог решить эту проблему. Буду признателен за любую оказанную помощь.

ответ

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 
    ) 

) 

как, идентификатор категории, как «ключ» & все другие связанные идентификаторы сообщений в качестве элемента.

Смежные вопросы