Pourquoi “/ page / 2 /” ne fonctionne-t-il pas?

9

La pagination a finalement fonctionné avec le code ci-dessous, mais la pagination est maintenant liée à / videos / page / 2 /, qui n’existe pas. Comment faire fonctionner la page 2?

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  //display stuff
endwhile;           

php  wp_pagenavi();
 ?>
    
posée Dave 06.03.2012 - 00:30

3 réponses

13

Vous avez trouvé la réponse:

  

Après une longue journée de débogage à travers le noyau wordpress, j’ai réussi à résoudre   ce numéro.

     

En gros, vous POUVEZ avoir une PAGE et un TYPE DE POSTE PERSONNALISÉ avec le même   prénom. Si vous le faites, les règles de réécriture permalien deviendront confuses et   déclencher un 404.

     

Une solution très simple que j'utilise est la suivante: La page qui répertorie la personnalisation   types de poste est appelé au pluriel (par exemple, produits) et le type de poste réel   nom est au singulier (par exemple, produit). Donc, ils ne sont pas en conflit et c'est tout   bien.

     

Fait Fait! J'espère que cela fera gagner du temps aux gens.

réponse donnée Dave 06.03.2012 - 00:53
4

Après une longue période, j’ai trouvé une solution à ce problème (grâce à franzblog ).

Si vous utilisez la version 4.2 ou ultérieure, vous devez ajouter les lignes suivantes dans votre fichier functions.php :

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

Tout fonctionne bien maintenant!

    
réponse donnée Dneiz 07.02.2016 - 14:16
1
  

vous POUVEZ avoir une PAGE et un TYPE DE POSTE PERSONNALISÉ du même nom

Il y a peut-être des années, c'était impossible, mais vous POUVEZ maintenant.

D'abord, ajoutez ces lignes à $args dans votre type de message:

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'your slug', // if you need slug
                 'with_front' => false,
                 ),

Deuxièmement, dans functions.php , ajoutez l'action:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

N'oubliez pas de supprimer les règles dans le tableau de bord.

    
réponse donnée ruorc 30.07.2015 - 14:34

Lire d'autres questions sur les étiquettes