De ce nu funcționează "/page/2/"?
În sfârșit am reușit să fac paginarea să funcționeze cu codul de mai jos, dar acum linkurile de paginare duc către /videos/page/2/, care nu există. Cum pot face ca pagina 2 să funcționeze?
<?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();
//afișează conținutul
endwhile;
php wp_pagenavi();
?>

Am găsit răspunsul:
După o zi întreagă de depanare prin nucleul WordPress, am reușit să rezolv această problemă.
Practic, NU poți avea o PAGINĂ și un TIP DE POSTARE PERSONALIZATĂ cu același nume. Dacă faci asta, regulile de rescriere a permalinkurilor se vor încurca și vor genera o eroare 404.
O soluție foarte simplă pe care o folosesc este: Pagina care listează tipurile de postări personalizate se numește la plural (de ex. produse), iar numele efectiv al tipului de postare este la singular (de ex. produs). Astfel, nu există conflict și totul funcționează bine.
Gata, gata! Sper că asta va economisi timpul oamenilor.

Presupun că nu doar postările personalizate, dar nici o postare și o pagină nu pot avea același nume.

Acest post m-a ajutat. Nu sunt sigur dacă este exact aceeași problemă, dar redenumirea paginii mele de la search/ la search-2 a rezolvat o problemă similară de paginare. Presupun că am un conflict în tema mea pe slug-ul search/. Poate cineva de aici să sugereze cum să confirm asta? Nu găsesc nicio referință la "search" în wp_posts - post_name.

După mult timp am găsit o soluție pentru această problemă (mulțumesc franzblog).
Dacă utilizați versiunea 4.2 sau mai recentă, trebuie să adăugați următoarele linii în fișierul 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;
}
Totul funcționează perfect acum!

NU puteți avea o PAGINĂ și un TIP DE POSTARE PERSONALIZATĂ cu același nume
Poate acum trei ani era imposibil, dar acum PUTEȚI.
Mai întâi, adăugați aceste linii în $args
pentru tipul vostru de postare:
'has_archive' => false,
'rewrite' => array(
'slug' => 'your slug', // dacă aveți nevoie de slug
'with_front' => false,
),
Apoi, în functions.php
adăugați acțiunea:
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);
}
Nu uitați să resetați regulile de rescriere în panoul de administrare.

O posibilitate este că, în panoul de administrare Settings -> Reading
, dacă ai selectat o Posts page
, opțiunea Blog pages show at most
va intra în conflict cu interogarea personalizată posts_per_page
pe acea pagină.
Așadar, asigură-te că fie deselectezi pagina de articole, fie te asiguri că numărul de articole pe pagină se potrivește cu opțiunea Blog pages show at most
din Settings -> Reading
.

După ce am depanat mult timp, am găsit în sfârșit soluția pentru problema de paginare.
În esență, în WordPress, nu poți avea o PAGINĂ și un TIP PERSONALIZAT DE POSTARE cu același nume. Dacă faci asta, regulile de rescriere a permalink-urilor se vor încurca și vor genera o eroare 404.
