Paginare WordPress nefuncțională pe șablonul search.php

2 ian. 2018, 09:32:18
Vizualizări: 359
Voturi: 1

Am o mică problemă, paginarea nu funcționează pe search.php. Interoghez rezultatele cu wp_Query folosind codul de mai jos, Văd linkurile de pagină dar când le apăs primesc eroare 404. Mi s-a spus că asta se întâmplă pentru că interoghez pe pagina search.php.

Codul pe care îl folosesc este luat de pe wp code pagination, Este o interogare lungă dar cele mai importante sunt aceste două linii:

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

și

'paged' => $paged,

interogare completă

if (isset($_GET['reg-prop-search-form'])){
    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;


    $args = array(
        'posts_per_page' => 9,
        's' => $_GET['s'],
        'post_type'      => 'property',
        'paged' => $paged,
        'meta_query'     =>  array(
            'relation '  => 'AND',
            array(
                'key'       => 'prop_area',
                'value'     => $area,
                'compare'   => $area_val,
            ),
            array(
                'key'       => 'prop_city',
                'value'     => $city,
                'compare'   => $city_val,
            ),
            array(
                'key'       => 'prop_type',
                'value'     => $type,
                'compare'   => $type_val,
            ),
            array(
                'key'     => 'prop_rooms',
                'value'   => array( $fromrooms, $torooms ),
                'type'    => 'numeric',
                'compare' => 'BETWEEN',
            ),
            array(
                'key'     => 'prop_store',
                'value'   => array( $fromfloor, $tofloor ),
                'type'    => 'numeric',
                'compare' => 'BETWEEN',
            ),
            array(
                'key'     => 'prop_price',
                'value'   => array( $min, $max ),
                'type'    => 'numeric',
                'compare' => $equal,
            ),
        ),
    );  
};

acesta este loop-ul

$the_query = new WP_Query( $args );

.....

    <?php if( $the_query->have_posts() ): ?>
        <?php while( $the_query->have_posts() ) : $the_query->the_post(); ?>


            <?php get_template_part( 'content', 'search' ); ?>

        <?php endwhile; ?>
    <div id="pagination">

        <?php

            $big = 999999999;
             echo paginate_links( array(
                'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
                'format' => '?paged=%#%',
                'current' => max( 1, get_query_var('paged') ),
                'total' => $the_query->max_num_pages
            ) );
        ?>
        <?php echo paginate_links( $args ); ?>


    </div>
    <?php else : ?>

        <?php get_template_part( 'no-results', 'search' ); ?>

    <?php endif; ?>
    <?php wp_reset_query();  // Restabilirea datelor globale ale postului afectate de the_post(). ?>
</div>
Comentarii

Eroarea 404 apare înainte de a fi selectat fișierul șablon. Folosește interogarea globală și hook-ul de acțiune pre_get_posts pentru a o manipula.

janh janh
2 ian. 2018 09:52:01

Mulțumesc pentru răspuns, am citit documentația. Nu folosesc interogarea globală, folosesc wp_query. Pe ce funcție ar trebui să folosesc pre_get_post pe care l-ai menționat?

DavSev DavSev
2 ian. 2018 10:01:07

pre_get_posts este un hook global care îți permite să folosești wp_query global, astfel încât WordPress să știe câte rezultate de căutare (și, prin urmare: pagini de rezultate ale căutării) sunt disponibile. Există exemple pe care le poți adapta, dar probabil poți copia cea mai mare parte din codul tău.

janh janh
2 ian. 2018 12:53:16