ОШИБКА архива таксономии Wordpress

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

У меня есть пользовательская таксономия с слагом « Residential_project_types », который назначен пользовательскому типу записи « Residential_projects» . Я хочу отобразить все термины из таксономии, выводя имя термина и ссылку.

ТАКОЕ работает...

Вместо того, чтобы отображать один термин для каждого, он, кажется, отображает термин для каждого сообщения, включенного в термин. Это, конечно, создает дубликаты. Кроме того, HTML-код отображается неправильно, что приводит к странному перекрытию элементов.

Я подозреваю, что что-то не так с петлей...? Хотя так и не смог разобраться. Любая помощь очень ценится!

Вот ссылка на неработающую/глючную страницу: http://desarch.robertrhu.net/Residential/

Вот код, который я написал:

<?php
    $terms = get_terms( array(
        'taxonomy'   => 'residential_project_types',
        'orderby'    => 'count',
        'hide_empty' => false,
        'fields'     => 'all'
    ) );
?>

<?php
    foreach( $terms as $term ) {

    $args = array(
        'post_type' => 'residential_projects',
        'residential_project_types' => $term->slug
    );

    $term_link = get_term_link( $term );

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) :
        /* Start the Loop */
        while ( $query->have_posts() ) : $query->the_post(); ?>
        <a class="property-thumb-link"
           href="<?php echo $term_link; ?>">
            <div class="property-thumb column medium-6 small-12">

                <img src="<?php the_field('category_image', $term); ?>"
                     alt="<?php the_field ('category_image_alt', $term); ?>" />

                <div class="property-thumb-title">
                    <h2>
                        <?php echo $term->name; ?>
                    </h2>
                </div>
            </div>
        </a>
     <?php wp_reset_postdata();
    endwhile;
 endif; }?>

person user5176291    schedule 25.04.2017    source источник


Ответы (2)


Я ужасно усложнял это. Вот мой ответ...

<?php $terms = get_terms( array(
    'taxonomy'   => 'residential_project_types',
    'orderby'    => 'count',
    'hide_empty' => true
) );

    foreach( $terms as $term ) :
?>

<a class="property-thumb-link"
   href="<?php echo get_term_link( $term ); ?>">
    <div class="property-thumb column medium-6 small-12">

        <img src="<?php the_field('category_image', $term); ?>"
             alt="<?php the_field ('category_image_alt', $term); ?>" />

        <div class="property-thumb-title">
            <h2>
                <?php echo $term->name; ?>
            </h2>
        </div>
    </div>
</a>
<?php endforeach; ?>
person user5176291    schedule 25.04.2017

Чтобы отобразить термины из пользовательской таксономии, я не думаю, что вам следует использовать WP_Query(), который предназначен для циклического просмотра сообщений.

Вместо этого вы можете получить свои объекты терминов, используя функцию get_terms(), перебирая их, как показано ниже:

<?php
$terms = get_terms( array(
    'taxonomy' => 'residential_project_types',
    'hide_empty' => false,
) );

// Temp output of terms so you can see what you're working with
// var_dump($terms);

// loop through all terms
foreach( $terms as $term ) {

    if( 0 === $term->count ) {

        // This $term has no posts attached to it - you may want to treat it differently.
        echo $term->name;

    } elseif( $term->count > 0 ) {

        // Build your term markup for terms that have posts attached
        $term_link = get_term_link( $term );
        ?>
        <a class="property-thumb-link" href="<?php echo $term_link; ?>">
            <div class="property-thumb column medium-6 small-12">
                <img src="<?php the_field('category_image', $term->term_id); ?>" alt="<?php the_field ('category_image_alt', $term->term_id); ?>" />
                <div class="property-thumb-title">
                    <h2><?php echo $term->name; ?></h2>
                </div>
            </div>
        </a>
        <?php

    }

}

Вы также можете скрыть пустые термины, установив 'hide_empty' => true в get_terms() — тогда вы сможете удалить условное выражение, которое проверяет наличие пустых терминов.

Я предполагаю, что ваши настраиваемые поля ACF присоединены к термину, поэтому нам нужно передать $term->term_id в качестве второго аргумента для the_field(), но я не совсем уверен, что вы делаете с этими полями. Надеюсь, этого достаточно, чтобы помочь вам добиться прогресса.

Удачи!

person csknk    schedule 25.04.2017
comment
Спасибо за ответ! Нет игральных костей. У меня была похожая мысль. Переместил сброс в несколько мест и никаких изменений. - person user5176291; 25.04.2017
comment
Привет. Кажется, я неправильно понял, что ты пытаешься сделать. Я исправлю свой ответ! - person csknk; 25.04.2017