Enfin, la pagination fonctionne 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();
?>
Trouvé la réponse:
Après une longue journée de débogage via WordPress, j'ai réussi à résoudre ce problème.
En gros, vous POUVEZ avoir une PAGE et un TYPE CUSTOM POST _ avec le même nom. Si vous le faites, les règles de réécriture permalien deviendront confuses et déclencheront un 404.
Une solution très simple que j'utilise est la suivante: la page qui répertorie les types de publication personnalisés est appelée au pluriel (par exemple, produits) et le nom du type de publication est au singulier (par exemple, produit). Donc, ils ne sont pas en conflit et tout va bien.
Fait fait! J'espère que cela fera gagner du temps aux gens.
Après un long moment, j'ai trouvé une solution à ce problème (merci à franzblog ).
Si vous utilisez la version 4.2 ou une version 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!
vous POUVEZ avoir une PAGE et un TYPE CUSTOM POST avec le même nom
Il y a peut-être des années, c'était impossible, mais maintenant vous pouvez.
Tout 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.