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?
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;
}
}
$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>';
Zuallererst habe ich hier die gleiche Frage gestellt und die Antwort selbst bekommen :)
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.