web-dev-qa-db-de.com

URL Rewrite + Page + Custom Post Type = Ungewöhnliche Weiterleitung

Noch ein weiteres Problem beim Umschreiben von URLs :)

Das Problem

Ich habe eine URL-Umschreiberegel, die funktionieren sollte, aber gegen jede Logik umleitet, ohne die Abfragevariable zu übergeben.

Die saftigen Details

Die Site hat eine Seitenstruktur, die wie folgt aufgebaut ist:

/unsere firma/aktionäre

und ich habe einen benutzerdefinierten Beitragstyp mit dem Namen "Aktionär". Mein Ziel ist es, dass die Struktur so funktioniert:

/unsere firma/aktionäre/super aktionärsname

... und für die Aktionärsseite, um eine benutzerdefinierte Abfrage für die Aktionärsposten durchzuführen. Normalerweise würde ich den Umschreibe-Slug für die Aktionärspost verwenden, aber ich möchte, dass der Inhalt im Kontext der ursprünglichen Seitenstruktur angezeigt wird ( Unsere Firma/Aktionäre ).

Um das zu erreichen, habe ich diesen Code in functions.php hinzugefügt (und bin seitdem zu Permalinks gegangen und habe gespeichert, um die Regeln zu aktualisieren):

add_action( 'init', 'my_custom_rewrites' );
function my_custom_rewrites(){
    add_rewrite_rule(
        'our-firm/shareholders/([^/]+)/?',
        'index.php?pagename=shareholders&shareholder_name=$matches[1]',
        'top' );
}

add_filter( 'query_vars', 'my_custom_query_vars' );
function my_custom_query_vars( $query_vars ){
    $query_vars[] = 'shareholder_name';
    return $query_vars;
}

All das an Ort und Stelle, wenn ich zu/Unsere-Firma/Aktionäre/Genialer-Aktionärsname gehe, leitet es mich auf die Aktionärsseite weiter, ohne die Abfrage var zu übergeben, und ändert die URL tatsächlich zu/Unsere -firma/aktionäre/. Der seltsame Teil ist, wenn ich den Umleitungs-Seitennamen in irgendetwas anderes ändere, es funktioniert und die Abfrage-Variable mühelos weitergibt.

Um es weiter zu testen, benutzte ich das handliche Rewrite Analyzer Plugin und bekam dieses:

Rewrite Analyzer Test Screenshot

Zusätzliche Bemerkungen

  • Ich führe WP 3.2.1 aus, teste lokal und habe nicht mit .htaccess herumgespielt

  • Die Aktionärsvorlage macht nichts Ungewöhnliches, aber lassen Sie es mich wissen, wenn Sie es sehen müssen

  • Berücksichtigt Wordpress die Bezeichnung eines benutzerdefinierten Beitragstyps, wenn URLs ermittelt werden? Die Pluralbezeichnung von "Aktionär" lautet natürlich "Aktionär".

  • Ich füge den CPT "Aktionär" über das Custom Post Type UI Plugin hinzu. Ich kann es manuell mit Code hinzufügen, wenn jemand der Meinung ist, dass dies helfen würde. Dies sind die CPT-Einstellungen:

    rewrite = true, slug = 'shareholder', with_front = true, query var = true und hierarchical = true.

  • Früher hatte ich die Post-Typ-ID "Aktionär" als "Aktionär". Dann wurde mir schnell klar, dass Probleme mit demselben Namen wie die Seite auftreten würden, auf die ich umleiten wollte. Ich habe dann den Beitragstyp in "Aktionär" geändert, was das Problem leider nicht gelöst hat. Könnte die Tatsache, dass es einen Post-Typ von "Aktionären" gab, dies beeinflussen? Vielleicht gibt es irgendwo einen geheimen magischen Cache, den ich ausräumen könnte ...

  • Ich weiß, dass es mindestens 5 bajillion WP URL-Umschreibungsposts im Web gibt, aber ich kann anscheinend keinen finden, der zu meinem spezifischen Problem passt. Entschuldigung, wenn ich einen verpasst habe :)

Ich bin am Ende meines Witzes - ich weiß, dass dies funktionieren sollte, aber es funktioniert nicht. Hoffentlich habe ich etwas schmerzhaft offensichtliches verpasst und es ist eine einfache Lösung. Bitte lassen Sie mich wissen, ob ich weitere Details/Codes/etc.

Jede Hilfe wäre dankbar, danke!

3
herronicoras

Sie sollten versuchen, 'slug' (im Parameter/in der Option 'rewrite') auf 'our-firm/shares' zu setzen, genau wie die Struktur, die Sie in der Funktion add_rewrite_rule () festgelegt haben.

Der erste Parameter von add_rewrite_rule () und die Einstellung 'rewrite' des benutzerdefinierten Beitragstyps müssen gleich sein, damit das Umschreiben tatsächlich funktioniert.

Wenn Sie sich also für die Codierung der Registrierung des benutzerdefinierten Post-Typs entscheiden, sollte Ihr register_post_type () ungefähr so ​​aussehen:

$args = array( 'rewrite' => array( 'our-firm/shareholders', 'with_front' => true ) );
register_post_type( 'shareholder', $args );

Natürlich müssen Sie das Array $ args mit einigen anderen Schlüsseln füllen. Ich habe gerade "umschreiben" angegeben, um die Erklärung einfach zu halten. Befolgen Sie die Dokumentation zu dieser Funktion, um eine ordnungsgemäße Registrierung vorzunehmen: http://codex.wordpress.org/Function_Reference/register_post_type

Wenn die Änderungen nicht übernommen werden, versuchen Sie, die Umschreiberegeln zu löschen. Sie können dies auf sichere Weise erreichen, indem Sie auf "Änderungen speichern" in Admin-Seite> Einstellungen> Permalinks klicken.

3
astiam

Aus der Dokumentation

WICHTIG: Standardmäßig erkennt WordPress keine benutzerdefinierten Abfragezeichenfolgen-Variablen, die zum Umschreiben verwendet werden. Sie müssen Ihre Querystring-Variablen bei WordPress registrieren. Verwenden Sie einfach add_rewrite_tag (), um Variablenwerte für die Abfragezeichenfolge nach einem Überschreiben zu erfassen, oder das obige Überschreiben funktioniert nicht!

Ich glaube, WordPress erkennt den "shareholder_name" nicht

Das musst du machen

add_action( 'init', 'my_custom_rewrites' );
function my_custom_rewrites(){

    add_rewrite_tag( '%shareholder_name%', '([^/]+)' );

    add_rewrite_rule(
        'our-firm/shareholders/([^/]+)/?',
        'index.php?pagename=shareholders&shareholder_name=$matches[1]',
        'top' );
}
0
rashid

Sind Sie sicher, dass Ihr benutzerdefinierter Beitragstyp eine separate single.php-Datei enthält?

Ich hatte ein Problem und dies war die Situation: Ich habe drei benutzerdefinierte Beitragstypen. Ich habe kürzlich den neuen erstellt und sein Permalink leitet mich auf die Seite eines anderen benutzerdefinierten Beitragstyps weiter. Ich habe alle Rewrite-Flush-Regeln usw. ausprobiert, aber dann wurde mir klar, dass das Problem darin besteht, dass ich für meinen neuen benutzerdefinierten Beitragstyp keine separate single.php-Datei habe, was dazu führt, dass mein neuer Beitragstyp eine Weiterleitung zu einem vorhandenen Beitrag hat von unterschiedlichem Typ standardmäßig.

Schauen Sie sich das an, vielleicht haben Sie die gleiche Situation wie ich. Viel Glück!

0
Justine Win

Ich hatte ein sehr ähnliches Problem und war verblüfft, dass der Neuschreibungsanalysator eine Übereinstimmung mit meiner Neuschreibungsregel zeigte, aber die Seite eine seltsame Weiterleitung ausführte. Nachdem ich diesen Artikel gelesen hatte: http://www.dev4press.com/2012/tutorials/wordpress/practical/how-wordpress-url-rewriting-works/ , wurde mir klar, dass ich versucht hatte, den Beitrag in neu zu schreiben Meine Umschreiberegel war eine Seite, die ein "Custom Post Type" ist und daher unterstützt WordPress keine URL-Umschreibungen dafür. Die ungerade Weiterleitung erfolgt aufgrund der "Canonical Redirect", die am Ende dieses Artikels erwähnt wird. Ich habe versucht, auf einen "Beitrag", nicht auf eine "Seite" umzuschreiben, und es hat funktioniert.

0
MadMax1138

Haben Sie versucht, Ihre Umschreiberegeln nach add_rewrite_rule () zu löschen:

function my_custom_rewrites(){
    add_rewrite_rule(
        'our-firm/shareholders/([^/]+)/?',
        'index.php?pagename=shareholders&shareholder_name=$matches[1]',
        'top' );
    flush_rewrite_rules(false);
}

Dies ist nichts, was Sie in der Produktion belassen würden, aber es könnte bestimmen, ob diese Regel zu Ihren Umschreibungen hinzugefügt wird oder nicht. Sie können auch nachträglich bestätigen mit:

global $wp_rewrite;
var_dump($wp_rewrite->rules);

um zu sehen, ob Ihre Regel hinzugefügt wurde.

0
Josh