WP gibt 404-Fehler für benutzerdefinierten Post-Typ mit GET-Variable

Ich verwende die folgende Methode, um eine $ _GET-Variable zu meinem benutzerdefinierten Beitragstyp in WordPress hinzuzufügen.

add_filter('query_vars', 'add_type2_var', 0, 1); function add_type2_var($vars){ $vars[] = 'type2'; return $vars; } add_rewrite_rule('/?c/(.[^/])/(.[^/])/(.*)$',"/c/$1/$2?type2=$3",'top'); 

Mein benutzerdefinierter Post-Typ ist ein nicht-hierarchischer Post. Die Links zu den Posts funktionieren ohne Probleme, aber wenn ich nach dem Schrägstrich versuche, etwas am Ende hinzuzufügen, funktionieren die Links nicht mehr.

Wenn ich show am Ende von http://127.0.0.1/wp/c/default/dd http://127.0.0.1/wp/c/default/dd/show hinzufüge show ergibt der Link einen Fehler 404. Obwohl es völlig in Ordnung ist, wenn ich am Ende Nummern wie http://127.0.0.1/wp/c/default/dd/123456 hinzufüge und ich könnte auch die 123456 mit $_GET in PHP bekommen.

Ich bin nicht sicher, wo das Problem ist, aber meine Vermutung ist, dass WordPress einen 404-Fehler vor meiner function gibt. Ich habe eine function mit single_template Filter.

AKTUALISIEREN:

Ich habe eine function zu ‘template_redirect’ hinzugefügt.

 function CPTTest() { if ( is_singular('cpt') ) { echo 'cpt'; } elseif ( is_singular() ) { echo 'post'; } else { echo 'none'; } var_dump($_GET); die(); } 

Das funktioniert gut, wenn ich die URL http://127.0.0.1/wp/c/default/dd/show . Das einzige Problem ist, dass es es nicht als cpt post erkennt. Aber es erkennt http://127.0.0.1/wp/c/default/dd/123456 als cpt post. Gleiches Ergebnis, wenn ich wp Aktion anstelle von template_redirect .

Solutions Collecting From Web of "WP gibt 404-Fehler für benutzerdefinierten Post-Typ mit GET-Variable"

Zahlen funktionieren, weil einzelne Posts Paginierung haben können, und es gibt eine Rewrite-Regel, die das unterstützt.

Wenn Sie nach einem Permalink einen zusätzlichen Parameter hinzufügen möchten, fügen Sie einen Rewrite-Endpunkt hinzu .

 add_rewrite_endpoint( 'show', EP_PERMALINK ); 

BEARBEITEN – Hier ist ein Beispiel für eine interne Umschreibung, vorausgesetzt, Ihr benutzerdefinierter Posttyp-Slug ist type1 :

 add_rewrite_rule( 'c/([^/]+)/([^/]+)/([^/]+)/?$', 'index.php?type1=$matches[1]&type2=$matches[3]', 'top' ); 

Es gibt Ihnen 404 durch eine Tatsache, dass auf Ihrer Anfrage nichts gefunden wird. Ich denke, das liegt daran, dass type query_var registriert query_var . Sie können versuchen, diese Situation mit Plugins zu debuggen: debug-bar (Registerkarte “Request”) und debug-bar-rewrite-Regeln (Rewrite Rules).