Benutzerdefinierte Taxonomie-Endpunkt-Paginierung mit paginate_links ()

Die Einrichtung

Ich habe 2 Taxonomien und 1 Beitragstyp:

  • Beitragstyp: products
  • Hierarchische Taxonomie: product_cat
  • Nicht hierarchische Taxonomie: product_type

Die product-category hat einen definierten Endpunkt:

 add_endpoint( 'types', EP_PRODUCT_CAT ); 

Jetzt versuche ich eine ziemlich lange URL zu erstellen, die beide Taxonomien kombiniert:

 https://www.example.com/products/parent-product-cat/child-product-cat/types/top-product-type/ 

Was funktioniert, ist der types query var gesetzt, der product_cat wird auf das gesetzt, was er auch sein muss – Rainbows und Bubblegum.

Das Thema

Seitennummerierung. Ich verwende paginate_links() die meine types query var ganz product_cat und den Wert der Abfrage query var zuordnet, was zu einem 404 führt. Der Pfad beginnt mit add_args Parameter add_args von paginate_links() . Ich kann sowohl product_cat und types übergeben als auch product_cat :

 global $wp_query; $term_cat = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); $term_type = get_term_by( 'slug', get_query_var( 'types' ), 'product_type' ); echo paginate_links( array( 'base' => '%_%', 'format' => '?paged=%#%', 'current' => max( 1, get_query_var( 'paged' ) ), 'total' => $wp_query->max_num_pages, 'end_size' => 0, 'mid_size' => 2, 'prev_next' => false, 'add_args' => array( 'product_cat' => $term_cat->slug, 'types' => $term_type->slug, ), ) ); 

Also sind die query_vars jetzt da, aber die Permalinks sind jetzt hässlich, da paginate_links() nur als $_GET Parameter $_GET :

 https://www.example.com/products/parent-product-cat/child-product-cat/types/top-product-type/page/2/?product_cat=abc&types=123 

Da die Permalink-Struktur während der Paginierung noch intakt ist, bin ich mir nicht sicher, ob Umschreibregeln zu diesem Zeitpunkt hilfreich sein werden – aber ich habe es versucht und es scheint nicht viel zu tun:

 /** * Endpoints and Rewrites * * @return void */ function theme_endpoints_rewrites() { add_rewrite_rule( '^products/([^/]+)/types/([^/]+)/page/([0-9]+)/?', 'index.php?post_type=products&product_cat=$matches[1]&types=$matches[3]&paged=$matches[4]', 'top' ); add_rewrite_endpoint( 'types', EP_PRODUCT_CAT ); flush_rewrite_rules(true); } add_action( 'init', 'theme_endpoints_rewrites' ); 

Ich habe auch versucht, die URLs der Paginierungslinks zu home_url() zu home_url() und zu versuchen, sie mit den übergebenen Argumenten neu zu schreiben, aber auch ohne Erfolg. Wenn ich die Permalink-Struktur als Standard ( plain ) belasse, werden die Seiten wie erwartet geladen. Es scheint zu passieren, wenn WordPress die paged Abfrage var umschreibt.


Das Folgende funktioniert fast. Es zeigt, dass product_cat den korrekten / erwarteten Wert hat, aber es verkettet beide types und paged Abfragevariablen in 1, so dass meine Abfrage var [types] => cotton/page/2 und die paged Abfrage var ablegt.

 function test_rewrites( $wp_rewrite ) { $wp_rewrite->rules['products/(.+?)/types/(.+?)/page/?([0-9]{1,})/?$'] = 'index.php?product_cat=$matches[1]&types=$matches[2]&paged=$matches[3]'; unset( $wp_rewrite->rules['products/(.+?)/page/?([0-9]{1,})/?$'] ); unset( $wp_rewrite->extra_rules_top['products/(.+?)/page/?([0-9]{1,})/?$'] ); } add_action( 'generate_rewrite_rules', 'test_rewrites' ); 

Weiß jemand, wie ich dem Endpunkt Seitenumbrüche hinzufügen und gleichzeitig die gewünschten URLs beibehalten kann?

Solutions Collecting From Web of "Benutzerdefinierte Taxonomie-Endpunkt-Paginierung mit paginate_links ()"