Если родительская категория отмечена, не отображать дочернюю категорию - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть этот Континент -> Настройка категории страны для пользовательского типа сообщения.

- Africa (parent 1)
    - Uganda
    - Zambia
    - Zimbabwe
- Asia (parent 2)
    - Afghanistan
    - Bahrain
    - Bangladesh
    - Bhutan

Если для сообщения проверена родительская категория, не повторяйте дочерние категории. (даже если проверен один или несколько дочерних элементов) echo => Africa, Asia

И возврат , если проверена одна или несколько дочерних категорий, но родительская категория - НЕ проверено. Показывать только дочерние категории. echo => Uganda, Zambia, Zimbabwe, Afghanistan, Bahrain, Bangladesh, Bhutan

ОБНОВЛЕНИЕ Также, если отмечена Африка (родитель 1), в то время как Азия (родитель 2) НЕ checke, но Афганистан и Бутан (дети родителя) 2) проверено, вывод должен быть: echo => Africa, Afghanistan, Bhutan.

Это будет выводить только ЕСЛИ проверена одна или несколько родительских категорий.

<?php

$post = get_post(); // If $post is already available, skip.
$terms = get_the_terms( $post->ID, 'custom-category' );
foreach ( $terms as $term ) :
    if ( $term->parent === 0 ) :
        echo '<a href="' . esc_url( get_term_link( $term->term_id, 'custom-category' ) ) . 
            '" title="' . esc_html( $term->name ) . '" ' . '>' . esc_html( $term->name ) . 
            '</a> ';
    endif;
endforeach;

    ?>

Как вывести дети, если их родитель НЕ проверен?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Мне удается найти решение этой проблемы! Это проверено и дает желаемый результат! Если у вас есть более элегантное решение, пожалуйста, дайте мне знать!

    <?php

    $categories = get_the_terms( $post->ID, 'custom-category' );

    // If term is a parent, add to post_parent array.
    $post_parent = array();
    foreach( $categories as $parent_id ) {
        if($parent_id->parent < 1) {
            $post_parent[] = $parent_id->term_id;
        }
    }

    // If terms parentId does not exist in post_parent array
    // add to array regions as a key => value pair
    $regions = array();
    foreach( $categories as $category ) {
        if (!in_array($category->parent, $post_parent)) {
            $regions[$category->term_id] = $category->name;
        }
    }

    // Sort terms based on keys (regions), impolde and print
    ksort($regions);
    $locations = array();
    foreach($regions as $key => $value) {
      $locations[] = ' <a href="https://www.google.com/maps?q=' . $value . '">' . $value . '</a>';
    }

    echo implode(",", $locations);

    ?>
0 голосов
/ 06 февраля 2020

Пожалуйста, попробуйте ниже код, который поможет вам для логики c необходимости, вы можете изменить его для ваших требований вывода

$post = get_post(); // If $post is already available, skip.
$terms = get_the_terms( $post->ID, 'category' );    
$outputparent = $outputchild = array();
foreach( $terms as $term ) :
    if( $term->parent === 0 ) :
        $outputparent[] = '<a href="' . esc_url( get_term_link( $term ) ) . 
            '" title="' . esc_html( $term->name ) . '" ' . '>' . esc_html( $term->name ) . 
            '</a> ';            
    else :
        $outputchild[] = '<a href="' . esc_url( get_term_link( $term ) ) . 
            '" title="' . esc_html( $term->name ) . '" ' . '>' . esc_html( $term->name ) . 
            '</a>';
    endif; //Endif
endforeach;

if( !empty( $outputparent ) ) :
    echo 'Parent category is checked<br>';
    echo implode('<br>', $outputparent);
    $outputchild = array();
elseif( !empty( $outputchild ) && empty( $outputparent ) ) :
    echo 'Only Childs<br>';
    echo implode('<br>', $outputchild); 
endif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...