Warum fügt WordPress beim Post-/Seitenaufruf einen doppelten numerischen Slug hinzu?

Lesezeit: 3 Minuten

Benutzer-Avatar
Rene

Dies ist mein erster Beitrag hier, daher entschuldige ich mich im Voraus für eventuelle Missgeschicke.

Ich habe stundenlang gesucht, um das herauszufinden, aber ich kann einfach nicht verstehen, warum das passiert.

Die Website, die ich einrichte, ist eine untergeordnete Website (nicht im Multisite-Sinne, aber als separate Site/Domain mit demselben Branding). Einige der Posts auf meiner Website stammen von der übergeordneten/Haupt-Site (werden aber durch Kopieren und Einfügen als neue Posts erstellt), und ich möchte die Original Artikel-ID als Teil der Permalinks.

Z.B http://www.example.com/hello-world/12345/wobei 12345 die Artikel-ID des Artikels auf der übergeordneten/Hauptwebsite ist.

Um dies zu erreichen, habe ich meinen Beiträgen ein benutzerdefiniertes Feld hinzugefügt, in dem ich die Artikel-ID des ursprünglichen Artikels hinzufügen kann external_article_id als Feldname. Ich habe dann versucht, die Permalinks mit folgendem Code zu manipulieren:

add_filter('post_link', 'append_custom_permalink', 10, 2);

function append_custom_permalink($url, $post) {
    $newurl = $url;

    if ($post->post_type == 'post') {
        $custom = get_post_custom_values('external_article_id', $post->ID);
        if (!empty($custom))
            $newurl = $url . $custom[0] . "https://stackoverflow.com/";
    }

    return $newurl;
}

Immer wenn ich den Permalink zu den Beiträgen ausgebe, erscheint er genau so, wie ich es möchte, sowohl im Editor als auch auf der Seite. Wenn ich jedoch entweder auf einen Link klicke oder die Adresse manuell eingebe, werde ich automatisch zu weitergeleitet http://www.example.com/hello-world/12345/12345/. Es dupliziert den zusätzlichen numerischen Slug und passiert auch, wenn ich es ersetze $custom[0] mit einem fest codierten numerischen Wert. Das gilt für alle Posts, und meine Permalink-Struktur (in den Einstellungen) ist so eingestellt /%postname%/.

Ich habe sogar versucht, die Permalink-Struktur zu setzen /%postname%/%ext_article_id%/ und ersetzen %ext_article_id% mit $custom[0], aber mit genau dem gleichen Ergebnis. Ich habe auch versucht, den gleichen Code auf einer anderen WordPress-Site zu verwenden, außer diesmal mit Seiten anstelle von Beiträgen, auch mit genau dem gleichen Ergebnis.

Idealerweise möchte ich so etwas wie verwenden add_query_arg($custom[0], '', get_permalink($post->ID));aber lassen Sie das damit verbundene Fragezeichen weg.

Kann mir bitte jemand erklären warum das so ist und wie ich das umgehen kann? Muss ich einen anderen Filter verwenden oder wie kann ich das angehen?

Danke im Voraus!

  • Klingt definitiv nach etwas in der Logik von WordPress beim Auflösen (auch bekannt als Erraten) von Posts/Seiten basierend auf der URL. Hatten Sie die Gelegenheit, den Code mit einem Debugger schrittweise durchzugehen und zu sehen, wo in WordPress möglicherweise die Duplizierung vorgenommen wird?

    – brasilianischer Jaguar

    5. Mai 2015 um 16:41 Uhr

Damit dies funktioniert, müssen Sie WordPress auch darauf aufmerksam machen rewrite_tag und spezifizieren Sie eine zusätzliche Permalink-Struktur via add_permastruct. Der folgende Code sollte den Zweck erfüllen:

function append_custom_permalink( $post_link, $post ) {
    if( $post->post_type == 'post' ) {
        $custom = get_post_custom_values( 'external_article_id', $post->ID );
        if( ! empty($custom) ) {
            $post_link = $post_link.$custom[0]."https://stackoverflow.com/";
        }
    }
    return $post_link;
}
add_filter('post_link', 'append_custom_permalink', 10, 2);

function sof_30058470_posts_rewrite() {
    add_rewrite_tag('%external_article_id%', '([^/]+)', 'external_article_id=');
    add_permastruct('external_article_id', '/%year%/%monthnum%/%day%/%postname%/%external_article_id%/', false);
}
add_action('init', 'sof_30058470_posts_rewrite', 10, 0);

Stellen Sie sicher, dass Sie Ihre Permalink-Struktur unter Einstellungen->Permalinks erneut speichern, nachdem Sie den Code hinzugefügt haben. Möglicherweise müssen Sie auch Ihren Browser-Cache aktualisieren/löschen.

1346060cookie-checkWarum fügt WordPress beim Post-/Seitenaufruf einen doppelten numerischen Slug hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy