2017-01-05 4 views
0

Für ein Projekt arbeite ich an mich folgende Permalink-Struktur für meine Beiträge erreichen will:Wordpress benutzerdefinierte Post Permalinks mit Taxonomien bricht normale Seiten

domain.com/special/my-post-slug

wo speziell ist eine benutzerdefinierte Taxonomie.

Was ich tat:

  • auf Einstellungen Went> Permalinks
  • die benutzerdefinierte Option auswählen und auf diese umgewandelt: /% Angebote% /% post%/
  • in den folgenden Wordpress Haken gehakt wie folgt aus:
<?php 

// in functions.php 


add_filter('post_link', 'specials_permalink', 10, 3); 
add_filter('post_type_link', 'specials_permalink', 10, 3); 

function specials_permalink($permalink, $post_id, $leavename) { 

    if (strpos($permalink, '%specials%') === FALSE) { 
     return $permalink; 
    } 

    $post = get_post($post_id); 

    if (!$post) { 
     return $permalink; 
    } 

    $terms = wp_get_object_terms($post->ID, 'specials'); 

    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) { 
     $taxonomy_slug = $terms[0]->slug; 
    } else { 
     $categories = wp_get_post_categories($post_id->ID, array('fields' => 'all')); 

     if(isset($categories[0])) { 
      $taxonomy_slug = $categories[0]->slug; 
     } else { 
      $taxonomy_slug = 'general'; 
     } 
    } 

    $permalink = str_replace('%specials%', $taxonomy_slug, $permalink); 

    return $permalink; 
} 

Dieser Code funktioniert gut, aber da ich hinzugefügt, um die Angebote auf den Permalink-Struktur fo Meine Beiträge werden nicht mehr geladen. Sie alle führen zu einem 404. Sobald ich% specials% aus der Permalink-Struktur entferne, arbeiten sie wieder.

während des Debuggens fand ich heraus, dass Wordpress meine Urls passt wie folgt:

Anfrage:

fr/my-Slug

Abfrage String:

lang = fr & Angebote = my -slug

Übereinstimmende Rewrite-Regel:

(fr | nl | en)/([^ /] +)/

$

Matched Rewrite Abfrage:

lang = fr & Angebote = my-Slug

Aber es muss sein 'Seitenname' von 'Specials'. Ich habe es bereits versucht, indem ich einige URLs neu zugeordnet habe und benutzerdefinierte Rewrite-Regeln und ähnliches hinzugefügt habe, aber ich kann keine Lösung finden. Der seltsamste Teil ist, dass gemäß dem WP-Codex die Permalink-Struktur nur auf Posts und Archivseiten angewendet wird, nicht auf Seiten. Meine Funktion, die in den Link eingebunden ist, wird beim Laden der Seite nicht ausgelöst. Aber aus irgendeinem Grund denkt Wordpress, dass meine Seiten Specials sind.

Ich habe versucht, so viele Informationen wie möglich hinzuzufügen, aber wenn etwas fehlt, bitte fragen.

Antwort

-1

Wenn Sie die Permalink-Struktur unter Einstellungen -> Permalinks ändern, ändern Sie es für alle Post-Typen (denke ich).

Mein Vorschlag: die Permalink-Struktur lassen, wie es standardmäßig (/%postname%/) ist und nach Typprüfung in Ihrer Filterfunktion hinzufügen:

function specials_permalink($permalink, $post_id, $leavename) { 

    if ('post' != get_post_type($post_id)) { 
     return $permalink; 
    } 

    // rest of your code 

} 
+0

Wenn ich das tue, meine Urls passen keine Rewrite Regel. –

Verwandte Themen