wake-up-neo.com

Verwenden Sie get_term_children, um die Unterkategorie einer übergeordneten Kategorie für den aktuellen Beitrag abzurufen

In meinem WooCommerce-Design habe ich eine Stammkategorie erstellt: "Marken". Dann habe ich für jedes Produkt die Marke als Unterkategorie zur übergeordneten Kategorie "Marken" hinzugefügt.

Auf der Produktseite möchte ich die Marke des aktuellen Produkts anzeigen.

global $post;

// Get the brands ID from slug
$brands_id = get_term_by('slug', 'brands', 'product_cat');

// Get the children of that term
$termchildren = get_term_children( $brands_id, 'product_cat' );

// Loop through the children of 'brand' term to echo the name of the brand
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, 'product_cat' );
    echo '<a href="' . get_term_link( $child, 'product_cat' ) . '">' . $term->name . '</a>';
}

Das klingt immer nach allen Marken. Wie nehme ich diese Informationen und filtere die Marken heraus, die nicht zum aktuellen Produkt gehören?

1
tommyf

Benötige überhaupt keine get_term_children(). Durchlaufen Sie einfach get_the_terms(), um zu ermitteln, was benötigt wird.

global $post;
$brands_id = get_term_by('slug', 'brands', 'product_cat');

$terms = get_the_terms($post->ID, 'product_cat');
foreach ($terms as $term) {
    if($term->parent === $brands_id->term_id) {
        echo $term->name;
        break;
    }
}
3
tommyf
$term_id       = get_term_by( 'slug', 'brands', 'product_cat' );
$taxonomy_name = 'product_cat';
$termchildren  = get_term_children( $term_id, $taxonomy_name );

echo '<ul>';
foreach ( $termchildren as $child ) {
    $term = get_term_by( 'id', $child, $taxonomy_name );
    echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
1

Zuallererst habe ich hier die gleiche Frage gestellt und die Antwort selbst bekommen :)

https://wordpress.stackexchange.com/questions/188839/wordpress-tags-and-hierarchy-parent-child-relation

So solltest du es machen:

    $taxonomies = array( 
        'brands'
    );

    $args = array(
        'orderby'           => 'name', 
        'order'             => 'ASC',
        'fields'            => 'all',
        'parent'            => '(parentID)',
        'hierarchical'      => true, 
        'child_of'          => 0
    ); 

    $terms = get_terms($taxonomies, $args);
    var_dump($terms);
    foreach ($terms as $term) {
        print '<h2 class="story-heading">'.$term->name.'</h2>';
    } 

wenn Sie die ID für die übergeordnete Kategorie bereits kennen, übergeben Sie diese einfach als INT und in den foreach-Zyklus erhalten Sie alle untergeordneten Begriffe (Unterkategorien) der übergeordneten Kategorie. Auch wenn Sie dies wiederverwenden müssen, meine ich, wenn Sie die gleiche Abfrage mehrmals anzeigen und unterschiedliche parent -> child -Begriffe erhalten möchten, würde ich empfehlen, eine Funktion zu schreiben und in die functions.php zu platzieren. Die Funktion sollte ungefähr so ​​aussehen:

function get_children_of_parent_terms($tax, $pid) {
  $taxonomies = $tax;

        $args = array(
            'orderby'           => 'name', 
            'order'             => 'ASC',
            'fields'            => 'all',
            'parent'            => $pid,
            'hierarchical'      => true, 
            'child_of'          => 0
        ); 

        $terms = get_terms($taxonomies, $args);
        var_dump($terms);
        foreach ($terms as $term) {
            print '<h2 class="story-heading">'.$term->name.'</h2>';
        }
   }

add_action('init','get_children_of_parent_terms');

Wenn Sie die untergeordneten Elemente aus dem übergeordneten Begriff (Kategorie) abfragen möchten, rufen Sie diese Funktion einfach mit dem Namen der übergeordneten Kategorie der Taxonomie als $ tax und der übergeordneten ID als $ pid auf, zum Beispiel echo get_children_of_parent_terms('brands','15');, und setzen voraus, dass Sie die haben Taxonomiemarken und einige übergeordnete Begriffe mit der ID 15, die alle untergeordneten Begriffe des Begriffs mit der ID 15 ausgeben.

Prost.

0
Mile Milosheski