Redirecționare de la /page/2 la pagina 1 folosind $paged

12 ian. 2014, 18:45:12
Vizualizări: 15.1K
Voturi: 2

Am configurat o interogare personalizată pentru postările mele (single.php) cu paginare, care funcționează perfect cu structura implicită de permalink-uri.

domain.com/p=ID&paged=2

Dacă schimb permalink-urile la /%postname%/, pagina /page/2/ se redirecționează înapoi la prima pagină.

<?php 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array( 'connected_type'=> 'posts_to_posts', 'posts_per_page' => 3, 'paged' => $paged, 'order' => 'ASC', 'connected_items' => get_queried_object() );

$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query( $args );
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>

    <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a>

<?php endwhile; endif; $wp_query = null; $wp_query = $temp; wp_reset_query(); ?>

Ce mă derutează este faptul că funcționează cu permalink-urile implicite, dar nu funcționează cu cele "frumoase"?

Paginarea pe pagina principală funcționează corect, doar pe pagina de postare apare această problemă. Poate cineva să mă îndrume în direcția corectă? Unde ar trebui să caut erorile?

Am dezactivat toate plugin-urile, am șters htaccess și am creat unul nou, dar tot nu funcționează.

0
Toate răspunsurile la întrebare 4
2

Dacă cineva întâmpină această problemă, poate adăuga acest cod în functions.php

add_filter('redirect_canonical','pif_disable_redirect_canonical');

function pif_disable_redirect_canonical($redirect_url) {
    if (is_singular()) $redirect_url = false;
return $redirect_url;
}

Sursă

12 ian. 2014 19:40:39
Comentarii

a face acest lucru va avea alte consecințe care pot fi nedorite, deoarece dezactivezi toate redirecționările canonice pentru toate postările individuale, folosește pe propria răspundere.

Milo Milo
12 ian. 2014 21:36:48

@Milo Există o soluție alternativă pentru aceasta?

ianrandmckenzie ianrandmckenzie
26 ian. 2021 14:24:20
0

Aceasta este o problemă veche legată de paginarea tipurilor personalizate de postări. Și are un issue deschis pe tracker-ul de dezvoltare WordPress core Ultima soluție alternativă care a apărut pe tracker este cea de mai jos. Funcționează excelent pentru mine.

/**
 * Repară problema de paginare pentru un tip personalizat de postare
 *
 * @link https://core.trac.wordpress.org/ticket/15551
 *
 * @param object $request WP_Query
 *
 * @return object
 */
function child_martfury_fix_request_redirect( $request ) {
    if ( isset( $request->query_vars['post_type'] )
         && 'custom_type' === $request->query_vars['post_type']
         && true === $request->is_singular
         && - 1 == $request->current_post
         && true === $request->is_paged
    ) {
        add_filter( 'redirect_canonical', '__return_false' );
    }

    return $request;
}
add_action( 'parse_query', 'child_martfury_fix_request_redirect' );
22 apr. 2020 12:48:34
3

Dacă acesta nu este bucla principală, adică (Pagina de Blog), WordPress va interpreta /2 ca un nume de subpagina și nu ca un query_var de paginare.

Dacă doriți ca acest lucru să funcționeze pe o pagină, trebuie să înregistrați un query_var personalizat http://codex.wordpress.org/WordPress_Query_Vars și să creați structura /page/paging/2 de exemplu.

12 ian. 2014 18:57:51
Comentarii

Dar, dacă este așa, nu ar trebui să funcționeze nici cu permalink-urile implicite, nu? Dacă ai vreo idee pe care pot încerca, te rog să-mi spui.

user156 user156
12 ian. 2014 19:12:32

Da, ai dreptate :) Permalink-urile "Implicite" nu au nevoie să rescrie query_vars, așa că majoritatea parametrilor GET vor fi analizați și vor fi accesibili. De aceea funcționează.

Robin Westerlundh Robin Westerlundh
12 ian. 2014 19:22:57

Salut, m-ai făcut să mă uit într-o altă direcție. Am căutat probleme de redirecționare cu paginarea și am dat peste această Soluție, a funcționat excelent cu codul meu actual. :)

user156 user156
12 ian. 2014 19:39:19
0

Am încercat soluția cea mai recomandată și nu a funcționat pentru mine - folosirea /nume-pagina/?page=2 tot m-a redirecționat către /nume-pagina/.

De asemenea, am observat că folosirea ?p=2 nu a funcționat nici ea.

Singura soluție pe care am găsit-o este folosirea unui alt nume de parametru, de exemplu ?pg=2 care nu provoacă redirecționare și este accesibil prin $_GET['pg'].

21 nov. 2023 15:49:28