循环显示一次父类别标题

时间:2018-10-16 13:05:23

标签: php wordpress loops while-loop categories

我遇到了一个while循环,该循环遍历了一个称为“经销商”的自定义帖子类型。

每个经销商都有一个父类别,其中一些有子类别。

我想在循环中仅显示一次父类别的名称,但这不起作用。

到目前为止,我已经获得了此代码,但是现在它显示了3次“ Nederland”,因为有3个经销商的父类别为“ Nederland”。

<?php while ( have_posts() ): the_post();
$categories = get_the_category(); 
$cat_name = $categories[0]->cat_name;

$titel_categorie = false;

if($cat_name == "Nederland" && !$titel_categorie)
{
    echo "Nederland";
    $titel_categorie = true;
}
?>

<div class="col-lg-4">
    <span class="dealer-title"><?php the_title(); ?></span>
    <span class="dealer-plaats"><?php the_field('plaats'); ?></span>
    <span class="dealer-plaats"><?php the_field('telefoonnummer'); ?></span>
    <span class="dealer-plaats"><?php the_field('website'); ?></span>
    <span class="dealer-plaats"><?php the_field('e-mailadres'); ?></span>
</div>
<?php endwhile; ?>

我以前曾经使用过这种方法,它确实有效,但现在却没有。

还有其他建议吗?

编辑

感谢大家的回答,其中一些人工作了一些,但并没有解决我现在所处的完整问题。

我设法部分地将其放置在while循环之外,但我也得到了子类别。

<?php 
$titel_categorie_nederland = false;
$titel_categorie_belgie = false;
$titel_categorie_italie = false;
$titel_categorie_polen = false;
$titel_categorie_noord_brabant = false;
while ( have_posts() ): the_post();
$categories = get_the_category(); 
$cat_name = $categories[0]->cat_name;


if($cat_name == "Nederland" && !$titel_categorie_nederland)
{
?>
<div class="col-lg-12"><h3>Nederland</h3></div>
<?php
    $titel_categorie_nederland = true;
}

if($cat_name == "Polen" && !$titel_categorie_polen)
{
?>
<div class="col-lg-12"><h3>Polen</h3></div>
<?php
    $titel_categorie_polen = true;
}

if($cat_name == "Belgie" && !$titel_categorie_belgie)
{
?>
<div class="col-lg-12"><h3>Belgie</h3></div>
<?php
    $titel_categorie_belgie = true;
}
if($cat_name == "Italie" && !$titel_categorie_italie)
{
?>
<div class="col-lg-12"><h3>Italie</h3></div>
<?php
    $titel_categorie_italie = true;
}
?>

<div class="col-lg-4">
    <span class="dealer-title"><?php the_title(); ?></span>
    <span class="dealer-plaats"><?php the_field('plaats'); ?></span>
    <span class="dealer-plaats"><?php the_field('telefoonnummer'); ?></span>
    <span class="dealer-plaats"><?php the_field('website'); ?></span>
    <span class="dealer-plaats"><?php the_field('e-mailadres'); ?></span>
</div>
<?php endwhile; ?>

这是行之有效的方法,但不是一种干净的编码方式,并且在添加新国家/地区时,以这种方式展望未来并非明智之举。

我有一个自定义职位类型的经销商,主要类别是国家/地区,而替代是省份。有没有办法用更简洁的代码来显示它?

https://imgur.com/a/4hcakmR

3 个答案:

答案 0 :(得分:1)

使用break将阻止循环运行

foreach ( $terms as $term ) {
    $land_titel = $term->name;

    if($land_titel == "Nederland" && !$land_titel_nederland) {
        echo "Nederland";
        break;
    }
}

如果您想在另一个循环(例如while循环)中中断循环,则可以使用continue

foreach ( $terms as $term ) {
    $land_titel = $term->name;

    if($land_titel == "Nederland" && !$land_titel_nederland) {
        echo "Nederland";
        continue;
    }
}

答案 1 :(得分:0)

这应该做到:

<?php

$post_type = 'dealers';

// Get all the taxonomies for this post type
$taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) );

foreach( $taxonomies as $taxonomy ) : 

    // Gets every "category" (term) in this taxonomy to get the respective posts
    $terms = get_terms( array( 
    'taxonomy' => $taxonomy,
    'parent'   => 0
    ) );

    foreach( $terms as $term ) :

        echo "<h1>".$term->name."</h1>";

        $posts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=-1" );

        if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post();
        ?>
        <div class="col-lg-4">
          <span class="dealer-title"><?php the_title(); ?></span>
          <span class="dealer-plaats"><?php the_field('plaats'); ?></span>
          <span class="dealer-plaats"><?php the_field('telefoonnummer'); ?></span>
          <span class="dealer-plaats"><?php the_field('website'); ?></span>
          <span class="dealer-plaats"><?php the_field('e-mailadres'); ?></span>
        </div>
        <?php endwhile; endif;

    endforeach;

endforeach;

?>

答案 2 :(得分:0)

在循环外设置(同时)

(station_id ,programme_start , programme_end, title, episode, season, year)