web-dev-qa-db-fra.com

Désactiver les pages simples et les archives et conserver l'aperçu

TL; DR

Est-ce que quelqu'un sait comment je peux désactiver les pages simples et les archives pour les types de publication personnalisés tout en conservant le mode de prévisualisation?


Je cherche un moyen de désactiver les pages uniques et les pages d'archives pour un type d'article personnalisé, car les articles ne seront affichés que dans les archives d'une taxonomie personnalisée attribuée aux articles. Ceci serait généralement facilement réalisé en définissant 'publicly_queryable' => false lors de la création du CPT.

Maintenant, voici la torsion: je veux toujours pouvoir utiliser le mode de prévisualisation pour les publications, afin de pouvoir vérifier mes modifications sur la publication avant de les enregistrer. Depuis le réglage de 'publicly_queryable' => false, la page de prévisualisation sera également désactivée. Je suis coincé entre le fait de dupliquer des pages simples ou le fait de ne pas voir les brouillons ou les modifications de messages.


Sur la base de la réponse de Cesar (merci!), J'utilise la solution suivante, qui montre également comment conserver le mode de prévisualisation et redirige vers les archives de la taxonomie, comme expliqué ci-dessus.

add_action('template_redirect', 'post_redirect', 99);

function post_redirect()
{
    global $post;
    if ((is_post_type_archive('post_type') || is_singular('post_type')) && !is_preview())
    {
        $post_terms = wp_get_post_terms($post->ID, 'taxonomy');
        if($post_term = $post_terms[0])
        {
            wp_redirect(get_term_link($post_term->term_id) . '#' . $post->post_name, 301);
            die();
        }
    }
}

Je suis toujours intéressé par une solution sans redirections, au cas où ce soit possible.

1
taymless

Vous pouvez rediriger, lorsque quelqu'un essaie de voir la archive ou la single de votre type de message personnalisé, il vous suffit de les rediriger vers une autre page, il suffit de mettre ceci dans votre functions.php

add_action( 'template_redirect', 'theme_redirects', 99 );

function theme_redirects() {
    if ( is_post_type_archive( 'post_type_slug' ) || is_singular( 'post_type_slug' ) ) {
     wp_redirect( 'my_url' );
         die();
  }
}

Voir les références:

is_post_type_archive

is_singular

template_redirect

2