2015-07-25 12 views
15

Ho un tipo di post personalizzato djs e una tassonomia personalizzata city con due termini: boston e nyc. Quindi un DJ può essere taggato come Boston o New York.Avere una pagina WordPress con lo stesso titolo del tipo di messaggio personalizzato "frontale" slug

profili DJ (un singolo djs post) si trovano a /nyc-wedding-dj/joe-shmoe/, per esempio, o per un Boston DJ, /boston-wedding-dj/jane-doe/. In altre parole, lo slug di riscrittura per quel tipo di post personalizzato è impostato come %city%-wedding-dj.

Ho due pagine normali chiamato /boston-wedding-djs/ e /nyc-wedding-djs/ (si noti il ​​plurale DJ con una s) in cui io uso un modello di pagina personalizzata per scorrere i DJ dalla città corrispondenti e visualizzare un elenco di link a DJ Profili dalla città di quella pagina.

Quello che mi piacerebbe fare è avere lo slug di riscrittura %city%-wedding-djs in modo che le singole pagine di tipo personalizzato "appaiano" (almeno a google) come pagine secondarie di quelle pagine menzionate sopra.

C'è un conflitto però, che quando cambio la lumaca riscrittura per il tipo di messaggio personalizzato djs-%city%-wedding-djs, ottengo un errore 404 Not Found per le pagine /boston-wedding-djs/ e /nyc-wedding-djs/.

Come posso avere uno slug di riscrittura con lo stesso nome di una pagina?

+0

Di solito è utile vedere un po 'di codice. Per lo meno, il modo in cui hai definito (e provato a definire) le tue riscritture. – rnevius

+0

Dove viene mostrato Google "figli di pagine"? Ho capito che le pagine secondarie (qui, singoli post di DJ) dovrebbero avere approssimativamente la stessa base di permalink per il SEO, ma è a mia conoscenza che ogni pagina è classificata in base al suo merito, che si tratti di un post singolo di un post tipo è più un problema di breadcrumb . Di solito lo gestisco allo stesso modo in cui ti trovi ora -// post-types/'è una pagina con una buona panoramica, quindi'/post-type/xyz/'sono i dettagli specifici del' post-tipo '' xyz'' - mai avuto problemi di SEO con esso; entrambi vengono visualizzati per ricerche Google 'post-type' – DACrosby

+0

A volte WordPress presenta alcuni errori in Wordpress quando si cambiano le lumache, e restituisce un 404. Eliminare le pagine con le stesse lumache, aggiornare lo slug di riscrittura. Quindi vai alle impostazioni> permalink e salva nuovamente i permalink. – addedlovely

risposta

7

Se si utilizza htaccess, è possibile impostare manualmente i reindirizzamenti per tali pagine e dovrebbero quindi risolversi correttamente. Aggiungere queste righe:

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] 

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

Si può anche essere in grado di fare questo con WordPress add_rewrite_rule tuttavia sembra già come sono confusi così sembra che sia meno probabile che lavorare.

6

Non è possibile avere un post e una pagina con lo stesso slug.

È necessario rimuovere la pagina e creare una pagina modello di archive-djs.php e forse un single-djs.php e che visualizzerà tale pagina in modo dinamico per voi.

Vai a questa pagina per il template hierarchy

+0

Tutte e tre le soluzioni proposte potrebbero risolvere il problema, ma questa è di gran lunga la soluzione meno "hackerata", più pulita, più a prova di futuro - in più è l'unica che non produce contenuti duplicati per quanto posso dire. È sempre una buona idea consultare la [gerarchia dei modelli] (https://developer.wordpress.org/themes/basics/template-hierarchy/) prima di fare soluzioni alternative - molto spesso fornisce una soluzione molto semplice a problemi piuttosto complicati. – Mikk3lRo

10

Questo mi ha ricordato di un grande blog post da Matthew Boynes su un argomento in qualche modo correlato.

Si consiglia di utilizzare una barra di base unica, per evitare gli scontri che si stanno descrivendo.

Se è necessario eseguire questa operazione e cercare una soluzione alternativa in WordPress, è possibile modificare la modalità di analisi della richiesta in arrivo, con l'aiuto del filtro request - o parse_request.

Esempio:

Questo controlla se la pagina %city%-wedding-djs esiste, quindi non è necessario aggiornare il frammento di codice se in seguito si aggiungono più città:

! 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; 
}); 

o se si ha solo boston e nyc come città e non avete bisogno di controllare se le pagine corrispondenti esiste:

! 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; 
}); 
.210

Ciò significa che la richiesta:

example.tld/nyc-wedding-djs/ 

è considerata ora un page e

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

come un post djs.

Qui assumiamo che le regole di riscrittura page abbiano una priorità inferiore rispetto al tipo di post djs.

Problemi correlati