2015-07-25 5 views
15

Ich habe eine benutzerdefinierte Beitragstyp djs und eine benutzerdefinierte Taxonomie city mit zwei Begriffen: boston und nyc. So kann ein DJ entweder als Boston oder NYC getaggt werden.Haben Sie eine WordPress-Seite mit dem gleichen Titel wie benutzerdefinierte Beitragstyp "Front" Slug

DJ-Profile (eine einzelne djs Post) sind zum Beispiel bei /nyc-wedding-dj/joe-shmoe/ oder für einen Boston DJ, /boston-wedding-dj/jane-doe/. Mit anderen Worten, der Umschreibungs-Slug für diesen benutzerdefinierten Post-Typ wird auf %city%-wedding-dj gesetzt.

Ich habe zwei reguläre Seiten genannt /boston-wedding-djs/ und /nyc-wedding-djs/ (man beachte den Plural DJs mit einem s), wo ich eine benutzerdefinierten Seitenvorlage einer Schleife durch die DJs aus der entsprechenden Stadt verwenden und eine Liste von Links zu DJ anzeigen Profile von der Stadt dieser Seite

Was ich tun möchte, ist die Neuschreiben Slug %city%-wedding-djs sein, so dass die benutzerdefinierten Post-Typ einzelne Seiten "erscheinen" (zumindest google) als untergeordnete Seiten der oben genannten Seiten.

Es gibt einen Konflikt jedoch, dass, wenn ich das Umschreiben von Butzen für die benutzerdefinierte Post-Typ djs-%city%-wedding-djs ändern, erhalte ich eine 404 Not Found Fehler für die Seiten /boston-wedding-djs/ und /nyc-wedding-djs/.

Wie kann ich Slug mit dem gleichen Namen wie eine Seite umschreiben lassen?

+0

Normalerweise ist es hilfreich, einen Code zu sehen. Zumindest die Art und Weise, wie Sie Ihre Rewrites definiert haben (und zu definieren versucht haben). – rnevius

+0

Wo zeigt Google "Kinder von Seiten" an? Ich bekomme, dass die Unterseiten (hier, einzelne DJ-Beiträge) in etwa die gleiche Permalink-Basis für SEO haben sollten, aber es ist mein Verständnis, dass jede Seite nach ihrem eigenen Rang gereiht wird, ob es ein Single Post von einem Post-Typ ist eher ein Breadcrumbs-Problem . Normalerweise handle ich so, wie du jetzt bist - '/ post-types /' ist eine Seite mit einem schönen Überblick, dann '/ post-type/xyz /' sind die spezifischen Details über den 'xyz'' post-type' - hatte nie SEO Probleme damit; beide kommen für "Post-Typ" Google-Suchen – DACrosby

+0

Es gibt manchmal und ungerade Fehler in Wordpress beim Wechseln von Slugs, es wird eine 404 zurückgeben. Löschen Sie die Seiten mit den gleichen Slugs, aktualisieren Sie die Umschreibungs-Slug. Dann gehen Sie zu Einstellungen> Permalinks und speichern Sie die Permalinks erneut. – addedlovely

Antwort

7

Wenn Sie htaccess verwenden, können Sie die Weiterleitungen für diese Seiten manuell einrichten, und diese sollten dann korrekt aufgelöst werden. Fügen Sie diese Zeilen:

RewriteCond %{REQUEST_URI} ^/boston-wedding-djs/$ [NC,OR] 
RewriteCond %{REQUEST_URI} ^/boston-wedding-djs$ [NC] 
RewriteRule . index\.php?pagename=boston-wedding-djs [NC,L] 
RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs/$ [NC,OR] 
RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs$ [NC] 
RewriteRule . index\.php?pagename=nyc-wedding-djs [NC,L] 

nach RewriteRule ^index\.php$ - [L]

Sie können auch in der Lage sein, dies add_rewrite_rule mit Wordpress zu tun, aber es ist schon, wie sie sind verwirrt scheint so scheint es, dass weniger wahrscheinlich zu arbeiten.

6

Sie können keinen Beitrag und eine Seite mit demselben Slug haben.

Sie müssen Ihre Seite entfernen und eine Vorlagenseite von archive-djs.php und vielleicht eine single-djs.php erstellen, die diese Seite dynamisch für Sie anzeigt.

Sehen Sie diese Seite für die template hierarchy

+0

Alle drei vorgeschlagenen Lösungen könnten das Problem lösen, aber dies ist bei weitem die am wenigsten "hackische", sauberste, zukunftssicherste Lösung - und es ist die einzige, die nicht zu doppelten Inhalten führt, soweit ich das beurteilen kann. Es ist immer eine gute Idee, die [Vorlagenhierarchie] (https://developer.wordpress.org/themes/basics/template-hierarchy/) zu Rate zu ziehen, bevor Sie Workarounds durchführen - sehr oft bietet es eine sehr einfache Lösung für ziemlich komplizierte Probleme. – Mikk3lRo

10

Das bin ich von einem großen Blog erinnerte post von Matthew Boynes auf einem etwas verwandten Fach.

Es wird empfohlen, einen eindeutigen Basis-Slug zu verwenden, um die von Ihnen beschriebenen Konflikte zu vermeiden.

Wenn Sie dies tun müssen und eine Workaround in WordPress suchen, dann ist es möglich, mit Hilfe der request - oder parse_request Filter, wie die eingehende Anfrage analysiert wird.

Beispiel:

Diese prüft, ob die %city%-wedding-djs Seite vorhanden ist, so dass Sie den Code-Schnipsel nicht aktualisieren müssen, wenn Sie später weitere Städte hinzu:

! is_admin() && add_filter('request', function($query_vars) 
{ 
    if (isset($query_vars['city']) && ! isset($query_vars['djs'])) 
    { 
     $slug = $query_vars['city'] . '-wedding-djs'; 

     // Override if the %city%-wedding-djs page exists 
     if (get_page_by_path($slug)) 
      $query_vars['pagename'] = $slug; 
    } 
    return $query_vars; 
}); 

oder wenn Sie bekam boston und nyc wie Städte und Sie nicht brauchen, wenn die entsprechenden Seiten vorhanden zu überprüfen:

! is_admin() && add_filter('request', function($query_vars) 
{ 
    if (isset($query_vars['city']) && ! isset($query_vars['djs'])) 
    { 
     $city = $query_vars['city']; 
     if (in_array($city, array('boston', 'nyc'))) 
      $query_vars['pagename'] = $city . '-wedding-djs'; 
    } 
    return $query_vars; 
}); 
Diese 363.210

bedeutet, dass die Anfrage:

example.tld/nyc-wedding-djs/ 

nun als page behandelt wird, und

example.tld/nyc-wedding-djs/joe-smhoe/ 

als djs Post.

Hier wird angenommen, dass die Umschreibungsregeln page eine niedrigere Priorität haben als für den Post-Typ djs.