Resolver un nombre de tipo de publicación personalizado vs. conflicto de permalink de página (la misma bala)

14

Tengo un tipo de publicación personalizado llamado "visningshus", y también una página con esa bala. Esto es como debería (debe) ser.

Actualmente, " enlace " enumera todas las publicaciones de ese tipo. Quiero mostrar la página que tiene esa barra de enlace permanente en su lugar.

¿Cómo puedo hacer que Wordpress no haga que el nombre del tipo de publicación tenga prioridad, sino el enlace permanente y muestre la página?

    
pregunta Henrik Erlandsson 19.02.2014 - 09:32

7 respuestas

25

Lo más fácil sería simplemente deshabilitar la página de archivo para este CPT:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

No olvides actualizar tus enlaces permanentes después en "Configuración > Permalinks"

    
respondido por el kraftner 19.02.2014 - 11:28
7

No tengo la reputación suficiente para comentar en la publicación de @ Carl, pero la suya es la respuesta correcta (al menos para esta situación de mantener la barra de página y barra de tipo de publicación personalizada lo mismo y no usar un archivo archive.php)

Pero su respuesta daría errores con la paginación. Para evitar errores de paginación:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Esto mira a la paginación, toma el número de la página y luego, por otro lado, lo obliga a usar la página con la barra correspondiente y luego inserta la variable de la página.

Este además de 'has_archive' => false, publicado anteriormente debe lograr la funcionalidad deseada.

Como indicaron otros, asegúrate de eliminar las reglas de reescritura visitando Configuración > Permalinks después de hacer este cambio.

Espero que esto ayude a alguien, porque sé que esto me dejó perplejo durante mucho tiempo.

    
respondido por el Andrew Herder 14.03.2017 - 21:22
4

Tjena Henrik!

Creo que todo lo que necesitas hacer es agregar una regla de reescritura a las reglas de Wordpress Rewrite que ya se han creado. Agregue este fragmento de código a sus funciones.php de su tema o inclúyalo como un pugin separado ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);
    
respondido por el Carl 13.05.2016 - 16:19
0

Lo resolví sin resolver el conflicto. Crea una página con slug visningshus y escribe lo que quieras en ella. Tome nota de la identificación de esta página.

Cree y personalice la plantilla archive-custom-post-type.php de la forma que desee (lo más probable es que solo use una plantilla de página) pero reemplace la parte del bucle con

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Luego, cuando vaya a enlace , verá el contenido administrado por la página en la url correcta.

Déjame saber que funciona.

    
respondido por el molokom 19.02.2014 - 11:31
0

No se permite votar, pero + para la solución Carls, register_post_type debería tener

'has_archive' => false

Simple. Sin embargo, cuando tenga problemas de paginación, eche un vistazo a

add_rewrite_rule
    
respondido por el Vitali Protosovitski 23.02.2017 - 18:31
0

¡Lo que lo arregló para mí fue configurar el archivo como falso pero también establecer el jerárquico como falso al configurar mi tipo de publicación personalizada!

    
respondido por el Adrian Sticea 05.10.2018 - 14:50
0

Aquí hay una solución general para priorizar la paginación sobre el contenido de tipos de publicación personalizados para CUALQUIER babosa de tipo de publicación personalizada.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Además de agregar este fragmento de código, también debes asegurarte de que tu tipo de publicación personalizada tenga archive = false

y por último, pero no menos importante, vaya a la página de configuración de Permalinks Configuración > Permalinks (/wp/wp-admin/options-permalink.php) y guardar la configuración actual para actualizar la estructura de enlaces en la página.

    
respondido por el jmarceli 08.10.2018 - 08:33

Lea otras preguntas en las etiquetas