php - que - wordpress editor gutenberg
Tener una página de WordPress con el mismo título que el tipo de publicación personalizada "front" slug (3)
Tengo un tipo de publicación personalizado djs
y una city
taxonomía personalizada con dos términos: boston
y nyc
. Entonces un DJ puede ser etiquetado como Boston o NYC.
Los perfiles de DJ (una sola publicación de djs
) se encuentran en /nyc-wedding-dj/joe-shmoe/
, por ejemplo, o para un DJ de Boston, /boston-wedding-dj/jane-doe/
. En otras palabras, la barra de reescritura para ese tipo de publicación personalizada se establece como %city%-wedding-dj
.
Tengo dos páginas regulares llamadas /boston-wedding-djs/
y /nyc-wedding-djs/
(observe el plural de DJs con una s ) donde utilizo una plantilla de página personalizada para recorrer los DJs de la ciudad correspondiente y mostrar una lista de enlaces a DJ Profiles desde la ciudad de esa página.
Lo que me gustaría hacer es hacer que la %city%-wedding-djs
reescritura sea %city%-wedding-djs
para que las páginas individuales de tipo de publicación personalizada "aparezcan" (al menos en google) como páginas secundarias de las páginas mencionadas anteriormente.
Sin embargo, hay un conflicto, cuando cambio la barra de reescritura para la publicación personalizada escriba djs
a %city%-wedding-djs
, obtengo un error 404 No encontrado para las páginas /boston-wedding-djs/
y /nyc-wedding-djs/
.
¿Cómo puedo tener una barra de reescribir con el mismo nombre que una página?
Si está utilizando htaccess, puede configurar manualmente los redireccionamientos para esas páginas y, luego, deben resolverse correctamente. Agregue estas líneas:
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]
después de RewriteRule ^index/.php$ - [L]
También puede hacer esto con WordPress add_rewrite_rule; sin embargo, parece que ya están confundidos, por lo que parece que es menos probable que funcione.
Esto me recordó una gran publicación de blog de Matthew Boynes sobre un tema algo relacionado.
Se recomienda utilizar una babosa base única para evitar los enfrentamientos que está describiendo.
Si debe hacer esto y está buscando una solución dentro de WordPress, entonces es posible ajustar la forma en que analiza la solicitud entrante, con la ayuda de la request
, o el filtro parse_request
.
Ejemplo :
Esto verifica si existe la página %city%-wedding-djs
, por lo que no necesita actualizar el fragmento de código si luego agrega más ciudades:
! 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 si solo obtuviste boston
y nyc
como ciudades y no necesitas verificar si las páginas correspondientes existen:
! 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;
} );
Esto significa que la solicitud:
example.tld/nyc-wedding-djs/
ahora se trata como una page
, y
example.tld/nyc-wedding-djs/joe-smhoe/
como una publicación de djs
.
Aquí suponemos que las reglas de reescritura de page
tienen menor prioridad que para el tipo de publicación de djs
.
No puede tener una publicación y una página con la misma babosa.
Debes eliminar tu página y crear una página de plantilla de archive-djs.php
y tal vez una single-djs.php
y eso mostrará esa página dinámicamente para ti.
Vea esta página para la jerarquía de plantillas