Comment désactiver la vue unique pour un type de publication personnalisé?

38

J'ai créé un type de message personnalisé:

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
));

Comment puis-je désactiver l'affichage de publication unique pour ce type de publication spécifique? Afficher un simple 404, c'est bien, ou rediriger vers la page d'accueil. C’est à l’intérieur d’un plugin, je ne peux donc pas créer un fichier single-sample_post_type.php pour configurer une page vide.

    
posée passatgt 05.01.2014 - 15:05

6 réponses

31

Vous pouvez utiliser template_redirect hook pour rediriger un type de message personnalisé. Vous pouvez utiliser n'importe quelle autre URL à la place de home_url() et le code d'erreur dans un autre argument.

<?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;
  }
}
?>

Mise à jour:

Une autre approche consisterait à définir 'publicly_queryable' => false lors de l’enregistrement de la publication personnalisée, comme mentionné précédemment par @gustavo. Mais cela vous donnera simplement 404 directement, il cacherait les archives individuelles, ainsi que complètement cachées du front-end et ne peut être configuré que pour les publications personnalisées.

    
réponse donnée sven 05.01.2014 - 15:12
60

Définir simplement l'argument

'publicly_queryable'  => false

lorsque vous appelez register_post_type ()

    
réponse donnée Gustavo 27.12.2014 - 22:38
7

Une méthode plus simple consiste à passer les arguments suivants lors de l’enregistrement du type de publication personnalisé

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
));
    
réponse donnée 0v3rth3d4wn 24.05.2014 - 21:01
6

Un. à partir de votre fichier de fonctions.

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;
      }
    }

Deux. à partir de votre fichier single.cpt.php:

<?php wp_redirect( home_url() ); exit; ?>
    
réponse donnée Brad Dalton 24.05.2014 - 21:10
1

Très bonne réponse de Sven, j'ai réécrit sa fonction pour faciliter l'ajout de plusieurs types de publication en utilisant in_array() dans l'instruction if, puis en redirigeant vers la page d'archive au lieu de la page d'accueil.

(au fait, je pense que le réglage query_var et / ou publically_queryable sur false désactivera non seulement les vues uniques, mais également la vue des archives natives, en remplaçant 'has_archive' => true . Dans ce cas, un WP_query personnalisé et créez votre propre page d’archive, dans un modèle, mais la requête principale ne le fera plus, ne le fera-t-il pas?)

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' );
    
réponse donnée slashbob 09.07.2016 - 18:27
0

Tester tous ceux mentionnés ci-dessus et la solution actuelle est plus simple que toutes les redirections suggérées.

Pour que l'archive soit accessible et répertorie les éléments, et pour chaque publication non , la redirection automatique vers l'ensemble 404

'query_var' => false

lors de l'enregistrement de votre CPT. Si vous définissez publicly_queryable sur false, vos archives seront redirigées vers la maison, toute autre combinaison ne fonctionnera pas. Définissez query_var sur false et c'est tout.

Voici le CPT complet enlace

voir la ligne 50 enlace

comme indiqué ici

enlace

  

Remarque: si query_var est vide, NULL ou un booléen FALSE, WordPress   essayez toujours de l’interpréter (4.2.2) et d’aperçus / vues de votre   Un message personnalisé vous renverra 404.

    
réponse donnée Benn 16.11.2018 - 23:22

Lire d'autres questions sur les étiquettes