Wie würde ich das übergeordnete Element einer bestimmten Amtszeit erhalten?
Ich verwende wp_get_object_terms
, um Taxonomiebegriffe für Posts abzurufen, aber anstatt alle markierten Begriffe anzuzeigen, möchte ich nur die übergeordneten Begriffe der markierten Begriffe anzeigen.
Wenn dies also meine ausgewählten Begriffe sind, möchte ich nur Frühstück, Mittag- und Abendessen anzeigen.
x BREAKFAST
x Cereal
x Eggs
LUNCH
Hamburger
x Pizza
DINNER
Fish
Bass
x Salmon
Trout
Lasagna
Wie kann ich das machen?
Vielen Dank an Ivaylo für diesen Code, der auf Bainternets Antwort basierte.
Die erste der folgenden Funktionen, get_term_top_most_parent
, akzeptiert einen Begriff und eine Taxonomie und gibt den übergeordneten Begriff der obersten Ebene zurück (oder den Begriff selbst, falls er nicht übergeordnet ist). Die zweite Funktion (get_top_parents
) arbeitet in der Schleife und gibt bei gegebener Taxonomie eine HTML-Liste der übergeordneten Elemente eines Posts zurück.
// Determine the top-most parent of a term
function get_term_top_most_parent( $term, $taxonomy ) {
// Start from the current term
$parent = get_term( $term, $taxonomy );
// Climb up the hierarchy until we reach a term with parent = '0'
while ( $parent->parent != '0' ) {
$term_id = $parent->parent;
$parent = get_term( $term_id, $taxonomy);
}
return $parent;
}
Sobald Sie die obige Funktion haben, können Sie die von wp_get_object_terms
zurückgegebenen Ergebnisse durchlaufen und die obersten übergeordneten Begriffe anzeigen:
function get_top_parents( $taxonomy ) {
// get terms for current post
$terms = wp_get_object_terms( get_the_ID(), $taxonomy );
$top_parent_terms = array();
foreach ( $terms as $term ) {
//get top level parent
$top_parent = get_term_top_most_parent( $term, $taxonomy );
//check if you have it in your array to only add it once
if ( !in_array( $top_parent, $top_parent_terms ) ) {
$top_parent_terms[] = $top_parent;
}
}
// build output (the HTML is up to you)
$output = '<ul>';
foreach ( $top_parent_terms as $term ) {
//Add every term
$output .= '<li><a href="'. get_term_link( $term ) . '">' . $term->name . '</a></li>';
}
$output .= '</ul>';
return $output;
}
Seit 3.1.0 ist get_ancestors()
verfügbar. Es gibt ein Array von Vorfahren vom niedrigsten zum höchsten Wert in der Hierarchie zurück.
Hier ist eine einfache Funktion, mit der Sie den obersten übergeordneten Begriff eines bestimmten Begriffs erhalten:
function get_term_top_most_parent( $term_id, $taxonomy ) {
$parent = get_term_by( 'id', $term_id, $taxonomy );
while ( $parent->parent != 0 ){
$parent = get_term_by( 'id', $parent->parent, $taxonomy );
}
return $parent;
}
Sobald Sie diese Funktion haben, können Sie einfach die von wp_get_object_terms
zurückgegebenen Ergebnisse durchlaufen:
$terms = wp_get_object_terms( $post->ID, 'taxonomy' );
$top_parent_terms = array();
foreach ( $terms as $term ) {
//Get top level parent
$top_parent = get_term_top_most_parent( $term->ID, 'taxomony' );
//Check if you have it in your array to only add it once
if ( !in_array( $top_parent->ID, $top_parent_terms ) ) {
$top_parent_terms[] = $top_parent;
}
}
/**
* Get top level term
*/
function get_top_level_term($term,$taxonomy){
if($term->parent==0) return $term;
$parent = get_term( $term->parent,$taxonomy);
return get_top_level_term( $parent , $taxonomy );
}
Ich hatte das gleiche Problem und ich habe es leicht gelöst. Überprüfen Sie dies heraus:
$taxonomy
definieren. Dies kann der Slug der Taxonomie sein, für die Sie die Daten abrufen möchten. Danach können Sie einfach Folgendes tun:
<?php
$postterms = wp_get_post_terms($post->ID, $taxonomy); // get post terms
$parentId = $postterms[0]->parent; // get parent term ID
$parentObj = get_term_by('id', $parentId, $taxonomy); // get parent object
?>
Jetzt hast du so etwas:
object(stdClass)#98 (11) {
["term_id"]=>
int(3)
["name"]=>
string(8) "Esportes"
["slug"]=>
string(8) "esportes"
["term_group"]=>
int(0)
["term_taxonomy_id"]=>
int(3)
["taxonomy"]=>
string(17) "noticiaseditorias"
["description"]=>
string(0) ""
["parent"]=>
int(0)
["count"]=>
int(4)
["object_id"]=>
int(123)
["filter"]=>
string(3) "raw"
}
Und Sie können $parentObj
verwenden, um Slug, Name, ID usw. abzurufen. Verwenden Sie einfach $parentObj->slug
oder $parentObj->name
als Beispiel.
Einfachster Weg:
$rootId = end( get_ancestors( $term_id, 'my_taxonomy' ) );
$root = get_term( $rootId, 'my_taxonomy' );
echo $root->name;
Vielleicht hilft das: get_ancestors( $object_id, $object_type );