Holen Sie sich das übergeordnete Element eines benutzerdefinierten Taxonomiebegriffs
7 Antworten
- Stimmen
-
- 2011-08-05
Vielen Dank an Ivaylofür diesen Code,der auf Bainternets Antwortbasiert.
Dieerste Funktion unten,
get_term_top_most_parent
,akzeptierteinen Begriff undeine Taxonomie undgibt das übergeordnete übergeordnete Element des Begriffs zurück (oder den Begriff selbst,wenner übergeordnetist). Die zweite Funktion (get_top_parents
) arbeitetin der Schleife undgibt beigegebener Taxonomieeine HTML-Liste der übergeordneten Eltern der Begriffeeines 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 das oberste übergeordnete Elementjedes Begriffs 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; }
Thanks to Ivaylo for this code, which was based on Bainternet's answer.
The first function below,
get_term_top_most_parent
, accepts a term and taxonomy and returns the the term's top-level parent (or the term itself, if it's parentless); the second function (get_top_parents
) works in the loop, and, given a taxonomy, returns an HTML list of the top-level parents of a post's terms.// 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; }
Once you have the function above, you can loop over the results returned by
wp_get_object_terms
and display each term's top parent: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; }
-
Ich würdegerneeine Modifikation sehen,bei dernichtnur die Begriffe der obersten Ebene,sondern alle Begriffe unter den obersten übergeordneten Elementen hierarchisch ausgedruckt werden.I'd love to see a modification that wouldn't just print out the top-level terms but, rather, all terms beneath the top-most parent, hierarchically.
- 0
- 2018-12-22
- Robert Andrews
-
@RobertAndrews Wenn Sienur die Kindereineseinzelnen Begriffsbenötigen,können Sie dasin WordPressintegrierte "get_term_children ($term,$taxonomy)" ([Dokumentation] (https://codex.wordpress.org/Function_Reference/get_term_children)) verwenden.. Wenn Sie alle Kinder des übergeordneten Elternteilseinesbestimmten Begriffserhaltenmöchten,können Sie das obige Ergebnis wiefolgt übergeben: `get_term_children (get_term_top_most_parent ($term,$taxonomy),$taxonomy)`.@RobertAndrews If you just need the children of a single term, you can use WordPress's built-in `get_term_children( $term, $taxonomy )` ([documentation](https://codex.wordpress.org/Function_Reference/get_term_children)). If you wanted to to get all children of a given term's top-level parent, you could pass the above result into it, like this: `get_term_children( get_term_top_most_parent( $term, $taxonomy ), $taxonomy )`.
- 0
- 2019-01-04
- supertrue
-
Wasistin diesem Fall $term,dh.das Objekt,der Name des Begriffs,das Präfixtaxonomyname_number?In allen Fällenist diese Methodeextrem lang zu laden.Ich habe seiteinigen Minuten daraufgewartet,dass die Seitegeladen wird.What is $term in this case, ie. the object, the name of the term, the prefixed taxonomyname_number? In all cases, this method is extremely long to load. I've been waiting for the page to load for several minutes now.
- 0
- 2019-01-04
- Robert Andrews
-
Wie ursprünglichgeschrieben,erwarteteeseine ID,aberich habe die Antwortbearbeitet,umeine Term-ID oderein WP_Term-Objekt zuzulassen. Sie sind [nicht dereinzige] (https://wordpress.stackexchange.com/questions/63277/how-to-get-the-top-most-term-top-ancestor-of-a-custom-taxonomy-child-term? rq=1) Meldeneines Problemsmit diesem Code -idealerweise sollteerneugeschrieben werden,um diein WPintegrierte Funktion "get_ancestors" zu verwenden,dieneu undbeim Schreiben der Antwortnichtgut dokumentiert war.Ich werdeeine neue Antwort veröffentlichen,wennich Zeit zum Testen hatte.As originally written it expected an ID, but I edited the answer to allow a term ID or WP_Term object. You're [not the only one](https://wordpress.stackexchange.com/questions/63277/how-to-get-the-top-most-term-top-ancestor-of-a-custom-taxonomy-child-term?rq=1) reporting an issue with this code—ideally it should be rewritten to use WP's built-in `get_ancestors` function, which was new and not well documented when the answer was written. I will post a new answer when I've had time to test.
- 1
- 2019-01-05
- supertrue
-
- 2013-06-17
Seit 3.1.0ist
get_ancestors()
verfügbar.Esgibt ein Array von Vorfahren vomniedrigsten zum höchstenin der Hierarchie zurück.Since 3.1.0,
get_ancestors()
is available. It returns an array of ancestors from lowest to highest in the hierarchy.-
Diesistmeiner Meinungnach die richtige Antwort.This is the correct answer in my opinion.
- 1
- 2015-07-05
- numediaweb
-
Diesist diebeste Antwort.This is the best answer.
- 1
- 2015-07-22
- Mark
-
- 2011-08-03
Hieristeine einfache Funktion,mit der Sie den obersten übergeordneten Begriffeinesbestimmten Begriffserhalten:
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 Sieeinfach die von
zurückgegebenen Ergebnisse durchlaufenwp_get_object_terms
:$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; } }
Here is a simple function that will get you the top most parent term of any given term:
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; }
Once you have this function you can just loop over the results returned by
wp_get_object_terms
:$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; } }
-
Vielen Dank!Ich versuche dasjetzt.Zu Ihrer Information Ich denke,Sie vermisseneinen engen Parenin Zeile 1 der Funktion.Thanks! I'm trying this now. FYI I think you're missing a close paren in line 1 of the function.
- 0
- 2011-08-03
- supertrue
-
Mussich $taxonomy als zweiten Parameterin $top_parent hinzufügen?do I need to add $taxonomy as a second parameter in $top_parent?
- 0
- 2011-08-03
- supertrue
-
Ich habe den Parameter $taxonomy hinzugefügt,erhaltejedocheine Fehlermeldung,wennich diesen Code verwende: https://gist.github.com/1122631I added the $taxonomy parameter but am getting an error when I use this code, here: https://gist.github.com/1122631
- 0
- 2011-08-03
- supertrue
-
jatust du.Ich habe die Antwort aktualisiert.yeah you do. i updated the answer.
- 0
- 2011-08-03
- Bainternet
-
Wissen Sie,warum der Code hier (http://gist.github.com/1122631)nichtfunktioniert?With that fixed, do you know why the code here (http://gist.github.com/1122631) wouldn't be working?
- 0
- 2011-08-03
- supertrue
-
Ihre Funktion scheint unterbrochen zu sein. Ihreforeach-Schleifen überschneiden sich. Versuchen Sie Folgendes: http://pastebin.com/u48dxzap und wenn Sieimmernocheine Fehlermeldungerhalten,fügen Sie Ihrengesamten Codeein undich werdees überprüfenyour function seems broken your foreach loops are overlapping try this: http://pastebin.com/u48dxzap and if you still get an error paste all of you code and i'll check
- 1
- 2011-08-03
- Bainternet
-
Esgibt immernoch dengleichen Fehler;Wennichprint_r ($top_parent_terms) drucke,erhalteichein leeres Array. Vielleicht liegt das Problem alsotatsächlichbei derersten Funktion?Meine Version hier - http://pastebin.com/cMUxs9NnIt still gives the same error; if I print_r($top_parent_terms), I get an empty array, so maybe the problem is actually with the first function? My version here - http://pastebin.com/cMUxs9Nn
- 0
- 2011-08-03
- supertrue
-
OK,ich denke,das Problem liegtbei "get_the_ID",dasin der Schleifefunktioniert. Versuchen Sie Folgendes: http://pastebin.com/u48dxzapOK think the problem is with `get_the_ID` which works in the loop so try this: http://pastebin.com/u48dxzap
- 0
- 2011-08-03
- Bainternet
-
@Bainternet lassen Sie uns [diese Diskussionim Chatfortsetzen] (http://chat.stackexchange.com/rooms/985/discussion-between-supertrue-and-bainternet)@Bainternet let us [continue this discussion in chat](http://chat.stackexchange.com/rooms/985/discussion-between-supertrue-and-bainternet)
- 0
- 2011-08-03
- supertrue
-
@ Bainternet-it hat diese Chat-Nachricht automatischgepostet?Bezüglichglobaler $post undpost-> ID verwendeich diesein WP_Query-Schleifen,sodassget_the_IDfunktionieren sollte.@Bainternet-it automatically posted that chat message? Re global $post and post->ID, I am using this within WP_Query loops so get_the_ID should be working.
- 0
- 2011-08-03
- supertrue
-
Nein,Sie verwendenesin einer Funktion,die von der Schleife aufgerufen wird. Funktioniertes?No you are using it in a function called by the loop, does it work?
- 0
- 2011-08-03
- Bainternet
-
- 2013-10-18
/** * 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 ); }
/** * 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 ); }
-
Bittefügen Sieeine Erklärung zusammenmit Ihrem Code hinzu.Please add an explanation along with your code.
- 1
- 2013-10-18
- s_ha_dum
-
- 2014-10-30
Ich hatte dasgleiche Problem und konntees leicht lösen. Überprüfen Sie dies:
Definieren Sie
$taxonomy
. Dies kann der Teil der Taxonomie sein,mit der Sie die Daten abrufenmöchten. Danach können Sieeinfach Folgendestun:<?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 haben Sie soetwas:
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 Sieeinfach$parentObj->slug
oder$parentObj->name
als Beispiel.I had the same problem and I solved easily. Check this out:
Define
$taxonomy
. It can be the slug of the taxonomy you want to get the data. After doing this, you can simply do this:<?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 ?>
Now you got something like this:
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" }
And you can use
$parentObj
to get slug, name, id, whatever. Just by using$parentObj->slug
or$parentObj->name
as exemple. -
- 2016-01-29
Einfachster Weg:
$rootId = end( get_ancestors( $term_id, 'my_taxonomy' ) ); $root = get_term( $rootId, 'my_taxonomy' ); echo $root->name;
Easiest way:
$rootId = end( get_ancestors( $term_id, 'my_taxonomy' ) ); $root = get_term( $rootId, 'my_taxonomy' ); echo $root->name;
-
- 2015-12-11
Vielleicht hilft dies:
get_ancestors( $object_id, $object_type );
Maybe this helps:
get_ancestors( $object_id, $object_type );
Wie würdeich das übergeordnete Elternteileinesbestimmten Begriffserhalten?
Ich verwende
wp_get_object_terms
,um Taxonomiebegriffefür Posts abzurufen,aber anstatt allemarkierten Begriffe anzuzeigen,möchteichnur die übergeordneten Eltern dermarkierten Begriffe anzeigen.Wenn dies alsomeine ausgewählten Begriffe sind,möchteichnur Frühstück,Mittag- und Abendessen anzeigen.
Wie kannich dasmachen?