web-dev-qa-db-fra.com

template_redirect ne fonctionne pas, apparemment sans raison

Eh bien, j’ai créé un plugin qui utilise template_redirect pour le type de message personnalisé squeezepages et tout fonctionne correctement, mais j’ai copié le code exact, le mets dans un nouveau plugin, l’a activé (avec quelques ajustements mineurs, par exemple, j’ai changé. le type de message personnalisé à newpages et le template_redirect prend le modèle d'une source différente) et tout à coup cela ne fonctionne pas?

Je peux avoir les deux plugins actifs en même temps, les pages compressées fonctionnent, les nouvelles pages non. Cela m'énerve tellement. J'ai même désactivé le plugin squeeze pages et cela ne fonctionne toujours pas. J'ai essayé toutes les combinaisons (il n'y a qu'un couple) et toujours rien. Il semble que cela ne fonctionne pas sans raison. Je regarde le même code depuis 2 heures et je ne parviens pas à le comprendre.

Voici le code de mes types de publication personnalisés:

add_action( 'init', 'ifp_create_post_type' );
function ifp_create_post_type() {
register_post_type( 'newpages',
    array(
        'labels' => array(
            'name' => __( 'New Pages' ),
            'singular_name' => __( 'New Page' )
        ),
    'public' => true,
    'menu_position' => 5,
    'rewrite' => true,
    'rewrite' => array('slug' => 'newpage', 'with_front' => FALSE),
    'supports' => array('title', 'editor', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'thumbnail', 'author', 'page-attributes')
    )
);
}

Et mon template_redirect:

function ifp_default_template() {
    if(get_post_type() == 'newpages') : global $wp_query, $post, $posts;
    include(PLUGINDIR . '/newpage/themes/default.php');
    exit; endif;
}
add_action('template_redirect', 'ifp_default_template');
2
Jared

J'ai résolu mon propre problème. Je devais mettre flush_rewrite_rules( false ); après ma fonction register_post_type. La raison pour laquelle cela ne fonctionnait pas, c'est parce qu'elle renvoyait la page avec une erreur 404; j'ai donc compris qu'il s'agissait d'un problème de permaliens et que le code ci-dessus l'a résolu pour moi.

3
Jared

Pas beaucoup de code ici ... Découpons-le en problèmes pouvant survenir:

  1. Vérifiez que ifp_default_template() est activé (par exemple, une redirection antérieure pourrait inclure un autre modèle et meurt, mais ne l'atteignant jamais).

  2. Vérifiez que get_post_type() renvoie la valeur attendue.

  3. Vérifiez que le chemin d’inclusion est généré correctement (j’utiliserais plugins_url() , c’est plus robuste que de créer un chemin à partir de chaînes).

1
Rarst