2014-12-09 3 views
1

Я показываю 3 последних сообщения из родительской категории («Где мы обслуживаем») на странице. В пределах этой материнской категории у меня есть 6 других категорий, названных по регионам («Африка», «Европа», «Азия» и т. Д.). На странице отображается название категории региона и размещаемый ниже контент. Вот улов; из этих 3 последних должностей, иногда будет 2 из той же категории региона. Когда это произойдет, мне нужна страница, чтобы показать категорию региона для ТОЛЬКО первого сообщения из этой категории. Надеюсь, этот код объясняет то, что я пытаюсь сделать:Показать категорию WordPress только для своего первого сообщения

  <div class="news"> 
       <?php 
       $args = array('numberposts' => '3', 'category' => 9); 
       $recent_posts = wp_get_recent_posts($args); 
       foreach($recent_posts as $recent){ 
        $category = get_the_category($recent["ID"]); 
        if(
         $category == //any previous post's category on this page 
        ){ 
         //echo the post WITHOUT the category name displayed 
         echo '<h2>'.$recent["post_title"].'</h2><br>'.$recent["post_content"].'<br>'; 
        } 
        else{ 
         //echo the post WITH the category name displayed 
         echo '<h1>'.$category[0]->cat_name.'</h1><br><h2>'.$recent["post_title"].'</h2><br>'.$recent["post_content"].'<br>'; 
        } 

       } 
       ?> 
      </div> 

Я не знаю, как проверить категории других сообщений на этой странице.

ответ

1

Как петля через сообщения, сохраните категории, которые вы использовали для массива, затем проверьте этот массив, чтобы узнать, существует ли категория.

$used_categories = array(); //optional, but for clarity 
foreach($recent_posts as $recent){ 
    $category = get_the_category($recent["ID"]); 
    $category_name = $category[0]->cat_name; 
    if(!isset($used_categories[$category_name])){ 
     //echo the category name displayed 
     echo '<h1>'.$category_name.'</h1><br />'; 
     //save to used categories. Value assigned doesn't matter 
     $used_categories[$category_name]=true; 
    } 
    //You are outputting this either way, so take it out of the if 
    echo '<h2>'.$recent["post_title"].'</h2><br />'.$recent["post_content"].'<br />'; 
} 
+0

Это замечательно! Гораздо лучше, чем мой обходной путь с использованием клиентского сценария. Благодаря! –

0

EDIT: Теперь я использую метод Эрика G.

Мне не удалось заставить это работать с PHP. Я закончил с использованием этой JavaScript в нижней части страницы:

var regionName = document.getElementsByTagName("h1"); 
if(regionName[1].innerHTML == regionName[0].innerHTML){ 
    regionName[1].style.display="none"; 
}; 
if(regionName[2].innerHTML == regionName[1].innerHTML){ 
    regionName[1].style.display="none"; 
}; 

Определенно не как чистые или «правильный», как я надеялся, но он работает сейчас ...

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