Tipo de publicación personalizada Slug / Page Slug Conflict - Prevenir el uso de slug reservado en la página guardada


13

Tengo un tipo de portafolio personalizado (portafolio de slug) en mi tema y todo funciona bien, excepto una cosa. Cuando las personas crean una página con una gran cantidad de cartera, por ejemplo: ejemplo.com/portfolio, el tema cree que quiero usar la página de archivo de tipo de publicación personalizada, no mi página creada en el editor.

¿Puedo de alguna manera "reservar" el portafolio de slug cuando las páginas se guardan para asegurarme de que nunca se use, tal vez renombrado a portafolio?

Mi proyecto utiliza los métodos descritos en este tutorial, aquí está el conflicto al que me refiero:

"Más allá de tener que parchear el código, hay otro inconveniente aquí en que no puedes llamar a tu página slug lo mismo que tu slug de tipo de publicación personalizada. Piensa en tu slug de tipo de publicación personalizada como una palabra clave reservada; sin embargo, puedes hacer el título de su página con el mismo nombre que su tipo de mensaje personalizado, siempre que su mensaje sea diferente ". - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

Gracias por cualquier consejo!


Una opción que veo sería eliminar esto del register_post_type () init: 'rewrite' => array ('slug' => 'portfolio', 'with_front' => true), y simplemente establezca 'rewrite' => false and solo vive con los feos artículos de cartera "individuales".
hhins

¡Vote por su pregunta ya que incluso yo quiero saber la respuesta! He trabajado con publicaciones personalizadas un par de veces, pero nunca me di cuenta de esto, y ahora, después de leer tu pregunta, lo intenté. Tienes razón, ¡WordPress se confunde aquí!
Rutwick Gangurde

Respuestas:


13

Los siguientes 2 filtros le permiten conectarse cuando WordPress verifica el slug y se encuentran en la función wp_unique_post_slug () en el archivo wp-includes / post.php.

Hay 2 filtros, uno para publicaciones jerárquicas y otro para publicaciones no jerárquicas. El filtro jerárquico proporciona la ID para la publicación principal, por lo que si $ post_parent es 0, sabe que esta es una publicación "base".

Los filtros también pasan $ post_type si desea agregar tipos de publicación específicos a su lógica.

Al devolver "verdadero", le está diciendo a WordPress que este slug es malo, por lo que WordPress agrega un sufijo, al igual que lo haría si nos estuviera tratando de enviar un nombre / slug que ya está en uso.

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}

Por alguna razón, sigo enfrentando el mismo problema
Tan-007

1

Cree una página con un trozo de 'cartera' y conviértala en 'Privada'. Se ocultará al público al reservar la babosa para un uso posterior.


1

Encontré exactamente este problema al investigar un problema de paginación. Tenemos una página de inicio de Noticias (slug "news") y la paginación estaba fallando ... los intentos de llegar a / news / page / 2 / siempre resultaron en '404 - No encontrado'.

El problema resultó ser que nuestro tipo personalizado de Noticias también recibió la "noticia" de la babosa. Al cambiar este último (por ejemplo a "news_archive") se solucionó el problema. Esto dejó las referencias URL de noticias originales sin cambios. Cambiar la babosa de la página de inicio de Noticias también funcionó, pero luego todas las URL incorporarían la babosa modificada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.