Пользовательская Таксономия Wordpress - Если не родительский термин - PullRequest
1 голос
/ 22 октября 2019

У меня есть пользовательская таксономия с двумя уровнями терминов.

  • Родительский термин
    • Дочерний термин
    • Дочерний термин
  • Родительский термин
    • Детский термин
    • Детский термин
  • Родительский термин (без детей)

I 'Я использую пользовательский шаблон archive.php с некоторым HTML, который я хочу отображать только в терминах без дочерних терминов.

Вот что я пробовал ...

$taxonomy = 'custom_tax';
$term = get_queried_object();

$children = get_terms( $term->taxonomy, array( 'parent' => $term->term_id ) );

if(!$children) {
    echo '<p>HTML only terms without child terms</p>';
}

Это работает, если это детский термин, но не родительский термин без детей!

Любая помощь, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 22 октября 2019

Установите parent в 0 в аргументах get_terms, будут возвращаться только термины таксономии верхнего уровня:

$terms = get_terms( array( 
    'taxonomy' => 'custom_tax',
    'parent'   => 0
) );

Затем вы можете отфильтровать эти результаты в зависимости от наличия дочерних терминов или нет,Эта get_term_children функция вернет массив дочерних терминов:

$term_children = get_term_children( $term_id, $taxonomy_name );
0 голосов
/ 23 октября 2019

Итак, я закончил, выполнив следующее, что отлично подошло для моей ситуации.

Использование $term->term_id вернул пустой массив, поэтому я использовал get_queried_object_id()

$term_id = get_queried_object_id();

Используемая функциякак рекомендовано выше BugsArePeopleToo

$term_children = get_term_children( $term_id, 'custom_taxonomy' );

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

Я также проверил, есть ли у термина родительский, проверив $ term-> parent ID.

if( empty($term_children) && $term->parent > 0 )

Это помогло просмотретьчерез термины, повторяя родительский идентификатор и печатая массив.

echo $term->parent;
print_r($term_children);

Собираем все вместе:

$term_id = get_queried_object_id();
$term_children = get_term_children( $term_id, 'custom_taxonomy' );

echo $term->parent;
print_r($term_children);

if( empty($term_children) && $term->parent > 0 ) {
    echo "<p>Hello world.</p>";
}
0 голосов
/ 22 октября 2019
<?php $term = get_queried_object(); ?>

<?php echo $term->name; ?>

<?php 
$children = get_terms( $term->taxonomy, array(
'parent'    => $term->term_id,
'hide_empty' => false
) );
if($children) { 

foreach ( $children as $child ) {
    ?>

    <?php echo '<li>' . $child->name . '</li>'; ?>

    <?php 
        $loop = new WP_Query( array( 
            'orderby' => 'date',
            'order' => 'ASC',
            'tax_query' => array(
                array(
                    'taxonomy' => 'mycustomtaxonomy',
                    'field' => 'id',
                    'terms' => $child->term_taxonomy_id
                )
            )
        ));
        while ($loop->have_posts()) : $loop->the_post();
        ?>

        <?php echo '<div>' . get_the_title() . '</div>'; ?>

        <?php 
        endwhile;
        wp_reset_postdata();
?>

<?php }
} ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...