web-dev-qa-db-fra.com

La pagination Wordpress ne fonctionne pas avec la page de recherche

Dans ma page de recherche, Ma requête renvoie 11 pages avec cette recherche: ?q=2&s=chem

Mais lorsque j'essaie d'accéder à une autre page que la première, telle que ?q=2&s=chem&paged=2 par exemple, WordPress affiche error not found.

Remarque: Si je laisse une variable vide dans l’URL, je n’ai aucun problème.

C'est mon WP_Query:

$args = array(

'number' => $number,
'offset' => $paged ? ($paged - 1) * $number : 0,
's' => $_GET['s'],
'meta_query' => array(
    'relation' => 'OR',
    [
        'key'          => 'comp_name',
        'value'        => $_GET['s'],
        'compare'      => 'LIKE'
    ]
),);

Quelqu'un sait comment résoudre ce problème?

1
hasan movahed

par défaut, Wordpress a sa propre requête principale dans la page de recherche. Dans votre cas, vous n'avez pas modifié la requête principale et créez simplement une requête personnalisée.

paginé est une variable de requête réservée qui est utilisée en premier par votre requête principale; lorsque les résultats de votre requête principale sont identiques, vous faites face à une erreur 404 et vous avez 3 choix:

1. changer la variable paginée

vous pouvez renommer votre variable de page de paginé en page ou quelque chose d'autre qui n'est pas utilisé par défaut par wordpress

2. remplacer 404 page

function override_404() 
{
    if ( is_search() && isset($_GET['s'])) {
        global $wp_query;
        $wp_query->is_404 = false;
    }
}
add_action('init', 'override_404');

3. Remplace la requête principale (best)

function change_search_query() {
    if ( is_search() && isset($_GET['s'])) {
        $args = array();
        query_posts( $args );
    }
}
add_action('init', 'change_search_query');
1
RezaSh