Wie bekomme ich die nächste vorherige Kategorie in derselben Taxonomie?

Wie WP get_adjacent_post function gibt die nächsten und vorherigen Post-Daten auf der Grundlage der Parameter Ich möchte die nächste / vorherige Kategorie Daten erhalten, gibt es jede WP eingebaute function, die den richtigen Job oder ich muss eine benutzerdefinierte Abfrage dafür schreiben.

 // Next/previous post example $in_same_cat = false; $excluded_categories = ''; $previous = true; $previous_post = get_adjacent_post($in_same_cat,$excluded_categories,$previous); 

Ich möchte nächste Kategorie nach category slug oder nach category id

Jede Hilfe wäre willkommen

Solutions Collecting From Web of "Wie bekomme ich die nächste vorherige Kategorie in derselben Taxonomie?"

Gibt es eine eingebaute WP-function, die den richtigen Job macht?

Nein.

[Muss ich] eine benutzerdefinierte Abfrage dafür schreiben?

Nein. Verwenden Sie get_terms () . Hier ist ein Beispiel.


Fügen Sie der wpse_99513_adjacent_category class wpse_99513_adjacent_category und nennen Sie sie wie wpse_99513_adjacent_category :

 $category_ids = new wpse_99513_adjacent_category( 'category', 'id', false ); 

– “Kategorie” ist die Taxonomie,
– ‘id’ ist das Feld, um die databaseabfrage mit und zu bestellen
– false zeigt leere Kategorien an.

Verwenden Sie Folgendes, um die nächste Taxonomie zu erhalten:

 $next_category = $category_ids->next( $category ); 

– $ category ist die ID der Kategorie, die Sie prüfen,
– $ next_category wird auf “false” gesetzt, wenn ein Fehler auftritt, und andernfalls auf “next_category”.

Previous funktioniert genauso:

 $previous_category = $category_ids->previous( $category ); 

– $ category ist die ID der Kategorie, die Sie prüfen,
– $ previous_category wird auf “false” gesetzt, wenn ein Fehler aufgetreten ist, andernfalls auf die vorherige ID.

Für Schnecken, die leere Kategorien überspringen, benutzen Sie:

 $category_ids = new wpse_99513_adjacent_category( 'category', 'slug' ); 

 class wpse_99513_adjacent_category { public $sorted_taxonomies; /** * @param string Taxonomy name. Defaults to 'category'. * @param string Sort key. Defaults to 'id'. * @param boolean Whether to show empty (no posts) taxonomies. */ public function __construct( $taxonomy = 'category', $order_by = 'id', $skip_empty = true ) { $this->sorted_taxonomies = get_terms( $taxonomy, array( 'get' => $skip_empty ? '' : 'all', 'fields' => 'ids', 'hierarchical' => false, 'order' => 'ASC', 'orderby' => $order_by, ) ); } /** * @param int Taxonomy ID. * @return int|bool Next taxonomy ID or false if this ID is last one. False if this ID is not in the list. */ public function next( $taxonomy_id ) { $current_index = array_search( $taxonomy_id, $this->sorted_taxonomies ); if ( false !== $current_index && isset( $this->sorted_taxonomies[ $current_index + 1 ] ) ) return $this->sorted_taxonomies[ $current_index + 1 ]; return false; } /** * @param int Taxonomy ID. * @return int|bool Previous taxonomy ID or false if this ID is last one. False if this ID is not in the list. */ public function previous( $taxonomy_id ) { $current_index = array_search( $taxonomy_id, $this->sorted_taxonomies ); if ( false !== $current_index && isset( $this->sorted_taxonomies[ $current_index - 1 ] ) ) return $this->sorted_taxonomies[ $current_index - 1 ]; return false; } } 

Das ist, was mir eingefallen ist. Vielleicht nicht das Beste, aber funktioniert 🙂

Angenommen, wir befinden uns auf einer benutzerdefinierten Taxonomie-Kategorieseite, und wir möchten mit dem nächsten fortfahren

 // get the term used on this current taxonomy page $term = get_term_by( 'slug', get_query_var('term'), get_query_var('taxonomy') ); //set your arguments $args = array( 'hide_empty' => 0, 'orderby' => 'name', 'order' => 'DESC', ); //set your vars $cycletaxonomy = 'author'; // get all terms in a custom taxonomy $cycleterms = get_terms($taxonomy, $args); // A for loop to cycle through all terms for ($x=0; $xslug; if ($curslug == $thisslug) { $nextslug = $cycleterms[$x+1]->slug; $prevslug = $cycleterms[$x-1]->slug; echo $nextslug; echo $prevslug; // now do what you want with this slug - like putting it into a link tag } }; 

Ich bin mir nicht sicher über die Einfügefunktionen in WordPress, aber Sie können

Holen Sie sich Next und Previous Pages und dann deren Kategorie mit der nächsten und vorherigen Post-ID.

Dies ist, was ich mit einer benutzerdefinierten Abfrage-Lösung kam hoffe, dass es anderen helfen, schrieb ich eine benutzerdefinierte function für dieses funktioniert es für alle Post-Typ-Kategorien (Post, benutzerdefinierte Post-Typen)

 function get_adjacent_category($category_slug,$taxonomy,$type){ global $wpdb; if($type=="next"){ $operater=" > "; $orderby=" ORDER BY tt.`term_id` ASC "; }else{ $operater=" < "; $orderby=" ORDER BY tt.`term_id` DESC "; } $query="SELECT *,(SELECT `term_id` FROM wp_terms WHERE `slug`='".$category_slug."') AS given_term_id, (SELECT parent FROM wp_term_taxonomy WHERE `term_id`=given_term_id) AS parent_id FROM `wp_terms` t INNER JOIN `wp_term_taxonomy` tt ON (`t`.`term_id` = `tt`.`term_id`) HAVING tt.taxonomy='".$taxonomy."' AND tt.`parent`=parent_id AND tt.`term_id` $operater given_term_id $orderby LIMIT 1"; return $wpdb->get_row($query); } $next_category = get_adjacent_category($slug,$taxonomy,"next"); $previous_category = get_adjacent_category($slug,$taxonomy,"previous"); 

Kleines Update basierend auf Akmur Antwort

 $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); $curslug = $term->name; $args = array( 'hide_empty' => 0, ); $cycletaxonomy = 'YOUR_TERM'; // get all terms in a custom taxonomy $cycleterms = get_terms($taxonomy, $args); // A for loop to cycle through all terms for ($x = 0; $x < count($cycleterms); $x++) { // assign current cycled category slug - i could have used id too actually $thisslug = $cycleterms[$x]->name; if ($curslug == $thisslug) { $nextslug = $cycleterms[$x + 1]->name; $prevslug = $cycleterms[$x - 1]->name; echo ''; // now do what you want with this slug - like putting it into a link tag } } 

Platziere diese function in deiner functions.php:

 function adjacent_post_by_category( $category, $direction, $content ) { // Info $postIDs = array(); $currentPost = get_the_ID(); // Get posts based on category $postArray = get_posts( array( 'category' => $category, 'orderby'=>'post_date', 'order'=> 'DESC' ) ); // Get post IDs foreach ( $postArray as $thepost ): $postIDs[] = $thepost->ID; endforeach; // Get prev and next post ID $currentIndex = array_search( $currentPost, $postIDs ); $prevID = $postIDs[ $currentIndex - 1 ]; $nextID = $postIDs[ $currentIndex + 1 ]; // Return information if( $direction == 'next' AND $nextID ): return ''; elseif( $direction == 'prev' AND $prevID ): return ''; else: return false; endif; } 

Und dies als Ihre vorherigen / nächsten Links (functionsparameter sind Beispiele):

 < ?php echo adjacent_post_by_category( 10, 'prev', 'Show previous post' ); ?> < ?php echo adjacent_post_by_category( 10, 'next', 'Show next post' ); ?>