De ce nu funcționează "/page/2/"?

6 mar. 2012, 01:30:06
Vizualizări: 66.5K
Voturi: 15

Î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();
 ?>
2
Comentarii

Nu aș recomanda suprascrierea interogării principale în acest fel, ai luat în considerare utilizarea pre_get_posts? Apoi poți folosi codul de paginare încorporat în loc să scrii propriul tău cod și poți simplifica la o buclă standard de articole

Tom J Nowell Tom J Nowell
7 feb. 2016 15:32:27

De asemenea, WordPress oferă o pagină de arhivă standard pentru tipurile de articole, deci ar trebui să ai deja o arhivă de articole la /videos/ care va încărca archive-videos.php, fără a fi nevoie să te complici cu interogări

Tom J Nowell Tom J Nowell
7 feb. 2016 15:33:26
Toate răspunsurile la întrebare 5
4
21

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.

6 mar. 2012 01:53:39
Comentarii

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

Rutwick Gangurde Rutwick Gangurde
6 mar. 2012 05:53:05

Au trecut 9 ani, încă actual! Mulțumesc

Sid Sid
30 mar. 2021 14:18:07

Nu am nicio idee ce înseamnă asta... Dar știu că este soluția!

Jamie Hutber Jamie Hutber
17 sept. 2021 02:31:53

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.

jnthnclrk jnthnclrk
7 nov. 2023 01:37:01
0

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!

7 feb. 2016 15:16:17
0

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.

30 iul. 2015 15:34:09
1

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.

23 mai 2021 19:16:18
Comentarii

Mulțumesc! Am petrecut atât de mult timp încercând să înțeleg care este problema

probablybest probablybest
3 mai 2023 17:33:00
0

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.

22 sept. 2020 18:45:26