¿Cómo deshabilitar la vista única para un tipo de publicación personalizada?

38

He creado un tipo de publicación personalizada:

register_post_type('sample_post_type',array(
    'labels' => array(
        'name' => _x('Sample Posts', 'post type general name'),
        'singular_name' => _x('Sample Post', 'post type singular name')
    ),
    'public' => true,
    'show_in_nav_menus' => false,
    'exclude_from_search' => true
));

¿Cómo puedo deshabilitar la vista de publicación única para este tipo de publicación específica? Mostrar un 404 simple está bien, o redirigir a la página de inicio. Esto está dentro de un complemento, por lo que no puedo crear un solo archivo sample -post_type.php para configurar una página vacía.

    
pregunta passatgt 05.01.2014 - 15:05

6 respuestas

31

Puede usar template_redirect hook para redirigir a un tipo de publicación personalizado, puede usar cualquier otra URL que desee en lugar de home_url() y el código de error en otro argumento.

<?php
add_action( 'template_redirect', 'wpse_128636_redirect_post' );

function wpse_128636_redirect_post() {
  $queried_post_type = get_query_var('post_type');
  if ( is_single() && 'sample_post_type' ==  $queried_post_type ) {
    wp_redirect( home_url(), 301 );
    exit;
  }
}
?>

Actualizado :

Un enfoque alternativo sería establecer 'publicly_queryable' => false al registrar la publicación personalizada como lo mencionó anteriormente @gustavo. Pero eso solo le dará 404 directamente, se escondería tanto como el archivo, básicamente completamente oculto en el front-end y se puede configurar solo para publicaciones personalizadas.

    
respondido por el sven 05.01.2014 - 15:12
60

Solo estableciendo el argumento

'publicly_queryable'  => false

cuando llamas a register_post_type ()

    
respondido por el Gustavo 27.12.2014 - 22:38
7

Una forma más sencilla de hacerlo puede ser pasar los siguientes argumentos al registrar el tipo de publicación personalizada

register_post_type('sample_post_type',array(
'labels' => array(
    'name' => _x('Sample Posts', 'post type general name'),
    'singular_name' => _x('Sample Post', 'post type singular name')
),
'public' => true,
'exclude_from_search' => true,
'show_in_admin_bar'   => false,
'show_in_nav_menus'   => false,
'publicly_queryable'  => false,
'query_var'           => false
));
    
respondido por el 0v3rth3d4wn 24.05.2014 - 21:01
6

Uno. Desde tu archivo de funciones.

add_action( 'template_redirect', 'redirect_cpt_singular_posts' );
    function redirect_cpt_singular_posts() {
      if ( is_singular('your-cpt-slug') ) {
        wp_redirect( home_url(), 302 );
        exit;
      }
    }

Dos. Desde su archivo single.cpt.php:

<?php wp_redirect( home_url() ); exit; ?>
    
respondido por el Brad Dalton 24.05.2014 - 21:10
1

A partir de la respuesta realmente buena de Sven, reescribí su función para facilitar la adición de múltiples tipos de publicaciones usando in_array() en la declaración if y luego redirigir a la página de archivo en lugar de a la página de inicio.

(por cierto, creo que la configuración de query_var y / o publically_queryable en false deshabilitará no solo las vistas individuales, sino también la vista de archivo nativa, que reemplaza a 'has_archive' => true . En ese caso, aún puede establecer cree un WP_query personalizado y cree su propia página de archivo, en una plantilla, pero la consulta principal no lo hará más, ¿verdad?)

function fq_disable_single_cpt_views() {
  $queried_post_type = get_query_var('post_type');
  $cpts_without_single_views = array( 'my-post-type', 'my-other-post-type' );
  if ( is_single() && in_array( $queried_post_type, $cpts_without_single_views )  ) {
    wp_redirect( home_url( '/' . $queried_post_type . '/' ), 301 );
    exit;
  }
}

add_action( 'template_redirect', 'fq_disable_single_cpt_views' );
    
respondido por el slashbob 09.07.2016 - 18:27
0

Probó todos los mencionados anteriormente y la solución real es más simple que cualquier redirección sugerida.

Para que el archivo sea accesible y enumere los elementos, y la publicación única no sea accesible y se redirija automáticamente al conjunto 404

'query_var' => false

al registrar tu CPT. Si establece publicly_queryable en falso, sus archivos serán redirigidos a su casa, cualquier otro combo no funcionará. Establece el query_var en falso y eso es todo.

Aquí está el CPT completo enlace

vea la línea 50 > link

como se indica aquí

enlace

  

Nota: si query_var está vacío, nulo o es un FALSO booleano, WordPress   aún intente interpretarlo (4.2.2) y las vistas previas / vistas de su   la publicación personalizada devolverá 404s.

    
respondido por el Benn 16.11.2018 - 23:22

Lea otras preguntas en las etiquetas