Показывать заголовок родительской категории только один раз в цикле - PullRequest
0 голосов
/ 16 октября 2018

У меня есть цикл while, который перебирает пользовательский тип сообщения, называемый «дилеры».

У каждого дилера есть родительская категория, а у некоторых из них есть дочерние категории.

Я хочупокажите имя родительской категории только один раз внутри цикла, но это не работает.

Я получил этот код до сих пор, но теперь он показывает "Nederland" 3 раза, потому что есть 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 голосов
/ 16 октября 2018

Это должно сделать это:

<?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;

?>
0 голосов
/ 16 октября 2018

Установить вне цикла (пока)

$titel_categorie = false;
0 голосов
/ 16 октября 2018

Использование 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;
    }
}
...