Parece que todos los recursos web se basan en el tema de eliminar un mensaje personalizado tipo slug
yourdomain.com/CPT-SLUG/post-name
ahora son soluciones muy desactualizadas que a menudo hacen referencia a instalaciones anteriores a WP versión 3.5. Una común es:
'rewrite' => array( 'slug' => false, 'with_front' => false ),
dentro de su función register_post_type. Esto ya no funciona y es engañoso. Así que le pido a la comunidad en el tercer trimestre de 2018 al borde de WordPress 5 ...
¿Cuáles son las formas modernas y eficientes de eliminar el mensaje Tipo de publicación de la URL de una publicación de tipo de publicación personalizada desde el argumento de reescritura o en cualquier otro lugar?
ACTUALIZACIÓN: Parece que hay varias formas de obligar a que esto funcione con expresiones regulares. Específicamente, la respuesta de Jan Beck debe estar constantemente dispuesto a monitorear la creación de contenido para garantizar que no se creen nombres de página / publicación en conflicto ... Sin embargo, estoy convencido de que esta es una debilidad importante en el núcleo de WP donde debería ser manejada por nosotros. . Tanto como opción / enlace al crear un CPT o un conjunto avanzado de opciones para enlaces permanentes. Por favor apoye el boleto de la pista.
Nota al pie: Por favor, apoye este ticket de trac mirándolo / promocionándolo: https://core.trac.wordpress.org/ticket/34136#ticket
fuente
Respuestas:
El siguiente código funcionará, pero solo debes tener en cuenta que los conflictos pueden suceder fácilmente si la babosa para tu tipo de publicación personalizada es la misma que una página o la babosa de la publicación ...
Primero, eliminaremos la babosa del enlace permanente:
Solo quitar la bala no es suficiente. En este momento, obtendrás una página 404 porque WordPress solo espera que las publicaciones y páginas se comporten de esta manera. También deberá agregar lo siguiente:
Simplemente cambie los "eventos" a su tipo de publicación personalizada y listo. Es posible que deba actualizar sus enlaces permanentes.
fuente
2 != count( $query->query )
. Con nginx, puede tener $ query-> query asarray('page' => '', 'name' => '...', 'q' => '...')
. Entonces @NateAllen, ¿cuál es el significado de esa condición?Escriba el siguiente código en el registro de taxonomía.
Lo más importante que debe hacer después de cambiar el código
Una vez que haya modificado su documento de taxonomía de tipo de publicación personalizado, intente ir a Configuración> Enlaces permanentes y volver a guardar su configuración , de lo contrario obtendrá una página 404 no encontrada.
Marque aquí para la mejor solución: http://www.krazzycodes.com/how-to-remove-custom-post-type-taxonomy-base-from-url-in-wordpress/
fuente
Traté de resolver esto no hace mucho y la respuesta breve de lo que sé es que no . No desde dentro del argumento de reescritura al menos.
La larga explicación se hace evidente si nos fijamos en el código real de
register_post_type
en wp-includes / línea post.php 1454 :Puede ver los prefijos
$args->rewrite['slug']
de la%$post_type%
etiqueta de reescritura. Uno podría pensar "simplemente configuremos la babosa paranull
entonces" hasta que observe algunas líneas:Puede ver que la función siempre espera un valor de slug que no esté vacío y de lo contrario utiliza el tipo de publicación.
fuente
En respuesta a mi respuesta anterior : por supuesto, podría establecer el
rewrite
parámetrofalse
al registrar un nuevo tipo de publicación y manejar las reglas de reescritura usted mismo de esta maneraPuede ver que la
add_permastruct
llamada ahora ya no incluye la babosa. Probé dos escenarios:fuente
Mirando las respuestas aquí, creo que hay espacio para una mejor solución que combine algunas cosas que aprendí anteriormente y agregue la detección automática y la prevención de duplicados de postrastos.
NOTA: Asegúrese de cambiar 'custom_post_type' para su propio nombre CPT en mi ejemplo a continuación. Hay muchos sucesos, y un 'buscar / reemplazar' es una manera fácil de atraparlos a todos. Todo este código puede ir en su functions.php o en un complemento.
Paso 1: deshabilite las reescrituras en su tipo de publicación personalizada configurando las reescrituras en 'falso' cuando registre la publicación:
Paso 2: agregue manualmente nuestras reescrituras personalizadas en la parte inferior de las reescrituras de WordPress para nuestro custom_post_type
NOTA: Dependiendo de sus necesidades, es posible que desee modificar las reescrituras anteriores (¿deshabilitar trackbacks? Feeds ?, etc.). Estos representan los tipos 'predeterminados' de reescrituras que se habrían generado si no hubiera deshabilitado las reescrituras en el paso 1
Paso 3: vuelva a hacer que los enlaces permanentes a su tipo de publicación personalizada sean 'bonitos'
NOTA: Puede detenerse aquí si no le preocupa que sus usuarios creen una publicación conflictiva (duplicada) en otro tipo de publicación que creará una situación en la que solo uno de ellos puede cargarse cuando se solicita la página.
Paso 4: evitar duplicar las publicaciones de babosas
NOTA: Esto agregará la cadena '-duplicate' al final de cualquier slugs duplicado. Este código no puede evitar las babosas duplicadas si ya existen antes de implementar esta solución. Asegúrese de verificar primero los duplicados.
Me encantaría saber de alguien más que pruebe esto para ver si también les funcionó bien.
fuente
/%category%/%postname%/
. Al agregar su código, los slugs de CPT se ven bien (aunque les falta la barra inclinada) ... y el verificador de conflictos también funciona. Pero la publicación real resulta en un 404.No necesita tanto código duro. Simplemente use un complemento ligero:
Tiene opciones personalizables.
fuente
Tuve los mismos problemas aquí y allá parece que no hay movimiento en el sitio de WordPress. En mi situación particular donde para publicaciones de blog individuales se necesitaba la estructura / blog /% postname% / esta solución
https://kellenmace.com/remove-custom-post-type-slug-from-permalinks/
terminó en un montón de 404
Pero junto con este maravilloso enfoque, que no está utilizando la estructura de enlace permanente del backend para el blog, finalmente funciona como un encanto. https://www.bobz.co/add-blog-prefix-permalink-structure-blog-posts/
Gracias un montón.
fuente
y podemos hacer algunos cambios en la función mencionada anteriormente:
a:
para establecer el valor post_type correcto.
fuente
Esto funcionó para mí:
'rewrite' => array('slug' => '/')
fuente
Para cualquiera que haya leído esto y haya tenido problemas con las publicaciones secundarias como yo, encontré que la mejor manera era agregar sus propias reglas de reescritura.
El principal problema que tuve fue que WordPress trata la redirección desde páginas que tienen 2 niveles (publicaciones secundarias) de profundidad de forma un poco diferente de lo que trata las 3 niveles (publicaciones secundarias).
Eso significa que cuando tengo / post-type / post-name / post-child / puedo usar / post-name / post-child y me redirigirá al que tiene post-type al frente, pero si tengo post-type / post-name / post-child / post-grandchild, entonces no puedo usar post-name / post-child / post-grandchild.
Echando un vistazo a las reglas de reescritura, parece que coincide con otras cosas que no sean el nombre de página en el primer y segundo nivel (creo que el segundo nivel coincide con el archivo adjunto) y luego hace algo allí para redirigirlo a la publicación correcta. A tres niveles de profundidad no funciona.
Lo primero que debe hacer es eliminar el enlace de tipo de publicación de los niños también. Esta lógica debería ocurrir aquí si nos fijamos en la respuesta de Nate Allen arriba:
Yo mismo usé una combinación de diferentes condicionales para verificar si la publicación tenía hijos y otras cosas para llegar al enlace permanente correcto. Esta parte no es demasiado complicada y encontrarás ejemplos de personas que lo hacen en otros lugares.
Sin embargo, el siguiente paso es donde las cosas cambian de la respuesta dada. En lugar de agregar cosas a la consulta principal (que funcionó para publicaciones personalizadas y sus hijos, pero no para los hijos secundarios), agregué una reescritura que fue al final de las reglas de WordPress para que si el nombre de página no se verificara y estuviera a punto de Si pulsa un 404, haría una última comprobación para ver si una página dentro del tipo de publicación personalizada tenía el mismo nombre; de lo contrario, arrojaría el 404.
Aquí está la regla de reescritura que utilicé suponiendo que 'evento' es el nombre de su CPT
Espero que esto ayude a alguien más, no pude encontrar nada más que tuviera que ver con las publicaciones secundarias y eliminar la babosa de esas.
fuente