2015-05-05 7 views
5

Dies ist mein erster Beitrag hier, also entschuldige ich mich im Voraus für irgendwelche Missgeschicke.Warum fügt WordPress einen doppelten numerischen Block bei der Post/Page-Ansicht hinzu?

Ich habe stundenlang versucht, dieses herauszufinden, aber ich kann einfach nicht verstehen, warum das passiert.

Die Website, die ich aufstelle, ist eine untergeordnete Site (nicht in einem Multi-Site-Sinne, aber als separate Website/Domäne mit dem gleichen Branding). Einige der Posts auf meiner Website stammen von der übergeordneten/Haupt-Website (aber werden als neue Posts durch Kopieren und Einfügen erstellt), und ich möchte die Original-Artikel-ID als Teil der Permalinks.

z. http://www.example.com/hello-world/12345/, wobei 12345 die Artikel-ID des Artikels auf der übergeordneten Website ist.

Um dies zu erreichen, habe ich ein benutzerdefiniertes Feld zu meinen Posts hinzugefügt, wo ich die Artikel-ID des ursprünglichen Artikels mit external_article_id als Feldname hinzufügen kann. Ich habe dann versucht, die Permalinks mit dem folgenden 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] . '/'; 
    } 

    return $newurl; 
} 

Immer, wenn ich Ausgang den Permalink an den Pfosten scheint es genau so, wie ich es will, sowohl im Editor und auf der Website. Wenn ich jedoch entweder auf einen Link klicke oder die Adresse manuell eingib, werde ich automatisch zu http://www.example.com/hello-world/12345/12345/ umgeleitet. Es dupliziert den zusätzlichen numerischen Slug und passiert auch, wenn ich $custom[0] durch einen hartcodierten numerischen Wert ersetze. Dies gilt für alle Posts, und meine Permalink-Struktur (in den Einstellungen) ist auf /%postname%/ festgelegt.

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

Idealerweise würde ich gerne etwas wie add_query_arg($custom[0], '', get_permalink($post->ID)); verwenden, aber das Fragezeichen weglassen, das damit einhergeht.

Könnte mir bitte jemand erklären, warum das passiert und wie ich das umgehen kann? Muss ich einen anderen Filter verwenden oder wie kann ich das angehen?

Vielen Dank im Voraus!

+0

Definitiv klingt wie etwas in Wordpress 'Logik in Auflösen (aka Raten) Beiträge/Seiten basierend auf der URL. Hatten Sie die Möglichkeit, mit einem Debugger durch den Code zu gehen und zu sehen, wo in Wordpress die Duplizierung stattfindet? – brazilianldsjaguar

Antwort

2

Um dies zu erreichen, müssen Sie auch WordPress auf die rewrite_tag aufmerksam machen und eine zusätzliche Permalink-Struktur über add_permastruct angeben. Der folgende Code sollte es tun:

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].'/'; 
     } 
    } 
    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, Ihre Permalink-Struktur neu speichern bei Einstellungen-> Permalinks, sobald Sie den Code hinzugefügt. Möglicherweise müssen Sie auch Ihren Browser-Cache aktualisieren/löschen.

Verwandte Themen