Suchen Sie nach Begriffen in einer benutzerdefinierten Taxonomie, die auf der Mietvereinbarung basiert

Ich habe eine hierarchische benutzerdefinierte Taxonomie, in der einzelne Termnamen auf verschiedenen Ebenen, aber nicht in einem einzigen hierarchischen Pfad wiederholt werden konnten.

Lassen Sie mich das anhand eines Beispiels erklären

News News > Regional News > International News > International > country Sports Sports > News Sports > News > Football 

Im obigen Beispiel wird der Begriff “News” zweimal wiederholt, aber der hierarchische Pfad ist unterschiedlich.

Angesichts dieser benutzerdefinierten Taxonomie-Struktur und Begriffe brauche ich einen Weg zu finden, ob ein gegebener hierarchischer Pfad vorhanden ist und wenn ja, dann bekomme ich die Kind-Term-ID.

ZB: Meine Eingabe für die Suche wäre Sports > News > Football und ich muss herausfinden, ob ein solcher Weg existiert und wenn ja, dann die ID des Blattbegriffs ( Football im obigen Fall)

Gibt es eine Möglichkeit, es mit integrierten WordPress-functionen zu tun?

Solutions Collecting From Web of "Suchen Sie nach Begriffen in einer benutzerdefinierten Taxonomie, die auf der Mietvereinbarung basiert"

Sie können dies tun, indem Sie jede Ebene rekursiv prüfen, um zu sehen, ob sie existiert, mit der darüber liegenden Ebene als übergeordnetes Element.

Während ich diesen Code nie in Wut benutzt habe, wurde er getestet und funktioniert, obwohl ich nicht sagen kann, wie effizient er sein wird, besonders wenn du einen langen hierarchischen Pfad hast.

Platziere diesen Code in functions.php

 /** * Return whether or not a given hierarchical taxonomy structure exists * * @param required array $path The hierarchical path to check * @param string $category The taxonomy to search * @param integer $parent The parent of the first term * (usually ignored when called by the user, this parameter is primarily * for use when the function is recursivly called) * @return boolean Whether or not the given path exists */ function taxonomy_path_exists($path, $taxonomy = 'category', $parent = 0){ if(!is_array($path) || empty($path)) // Ensure that the '$path' is given as an array, and id not empty return false; if(term_exists($path[0], $taxonomy)) : // The term exists, recursivly check if the given children exist $term = get_term_by('slug', $path[0], $taxonomy); // Get this term as an object unset($path[0]); // Remove this level so that it doesn't get retested $path = array_values($path); // Reset the keys within the '$path' array /** * Check if the '$path' array is now empty (meaning that all levels have been exhusted) * or if the next level exists */ if(empty($path) || path_exists($path, $taxonomy, $term->term_id)) : return ture; else : return false; endif; else : // The term does not exist return false; endif; } 

Um diese function zu verwenden, übergeben Sie ein Array des zu überprüfenden Pfads zusammen mit der Kategorie, zu der es gehört. Ich habe an Ihren Begriff Schnecken gedacht und dass Sie category , aber Sie können wie erforderlich ändern.

Dieser Code funktioniert auch für Teilepfade. Wenn Sie beispielsweise 'football' entfernen würden, würde es immer noch funktionieren.

Fügen Sie diesen Code in Ihre Vorlage ein, wo Sie einen bestimmten hierarchischen Pfad überprüfen möchten –

 $path = array( 'sports', 'sports-news', 'football' ); echo (taxonomy_path_exists($path, 'category')) ? 'Yes' : 'No';