Wordpress - 如果多个帖子具有相同的标题,则仅显示列表中的第一个帖子标题

时间:2017-03-23 15:23:38

标签: php wordpress

我写了几个显示每个类别的帖子(事件)标题的短代码,但是我有一些名称相同的帖子,因为它们是相同的事件,但具有不同的日期。我列表中的这些重复名称肯定会引起访问者的混淆并且看起来不太好,所以我只希望显示具有相同名称的第一个帖子。我不能只是更改名称,因为我有一个不同的列表,它将具有相同名称的帖子捆绑在一起作为日历。我正在使用The Events Calendar btw。

所以我的问题是:我如何应用过滤器或if语句只显示具有相同标题的一系列帖子中的第一个,同时不影响没有重复名称的帖子的显示?

目前看起来有点像这样:

类别
- 制作
- 绘图
- 折纸< -
- 折纸< -
- 折纸< -
- 木工

Origami出现三次,我希望它只出现一次。

我的短代码如下:

extract(
    shortcode_atts(
        array(
            'posts_per_page' => -1,
        ),
        $atts
    )
);

$args = array(
    'posts_per_page' => $posts_per_page,
);

ob_start();

$events = tribe_get_events( $args );

echo '<ul>';

foreach ($events as $event) {

    $parent = $event->post_parent;
    if(has_term(9,'tribe_events_cat', $event) && !$parent){
        echo '<li><a href="' . get_permalink($event) . '">' . $event->post_title . '</a></li>';
    }
}

echo '</ul>';

wp_reset_query();
$retVal = ob_get_contents();
ob_end_clean();

return $retVal;

我在想是否可以检查循环中的前一项是否具有相同的标题,因此我将以下内容添加到if语句中,但它不能令人遗憾地工作:

    $ prev = get_previous_post();

if($prev->post_title != $event->post_title){

2 个答案:

答案 0 :(得分:1)

如果结果不存在,您可以将结果推送到新数组中......例如:

$eventsArray = array();
foreach($events as $event){
  if ( in_array($event, $eventsArray) ) {
    continue;
  }
 $eventsArray[] = $event;
}

答案 1 :(得分:0)

其他方法是将所有发布的标题存储在一个数组中并检查条件。

// create an array to store all the titles which are displyed        
$previous_posts = array();
foreach ($events as $event) {

    $parent = $event->post_parent;
    // add extra condition to check the title is not in previous posts array
    if(has_term(9,'tribe_events_cat', $event) && !$parent && !in_array($event->post_title,$previous_posts)){
        echo '<li><a href="' . get_permalink($event) . '">' . $event->post_title . '</a></li>';

    }
    // store all the titles to array
    $previous_posts[] =  $event->post_title;

}