web-dev-qa-db-fra.com

Requête d'archive de page personnalisée par une URL appelant var page deux fois sur l'une de mes requêtes personnalisées?

C'est un problème tellement étrange. Je vais essayer de le décomposer aussi simplement que possible.

Je crée ma propre requête de page personnalisée qui fonctionne comme une archive utilisant des variables d'URL pour personnaliser les résultats de la requête.


Ceci est ma fonction getVar() ...

public static function getVar($name, $default = false) {

    // check our param exists
    if(isset($_REQUEST[$name])) {
      return $_REQUEST[$name];
    }

    // return our default value
    return $default;
}


Ceci est toute ma requête page-products.php ...

// get our filter params
$sSearch       = CF::getVar('search', false);
$sCategory     = CF::getVar('cat', false);
$sSweets       = CF::getVar('sweets', false);
$sChocolates   = CF::getVar('chocolate', false);
$sSnacks       = CF::getVar('biscuits-snacks', false);
$sPackaging    = CF::getVar('packaging', false);
$sSorting      = CF::getVar('orderby', 'random');

// build our basic filters
$aFilters = array (
    'post_type'         => 'product',
    'post_status'       => 'publish',
    'posts_per_page'    => 100,
    'orderby'           => 'ASC',
    'tax_query'         => array (
        'relation'          => 'AND',
    )
);

// filter by search query
if($sSearch) {
    $aFilters['s'] = $sSearch;
}

// filter by product category
if($sCategory) {
    // extend our filter array
    $aFilters['tax_query'][] = array (
        'taxonomy'  => 'cat',
        'field'     => 'slug',
        'terms'     => array ($sCategory),
    );
}

// filter by product sweets
if($sSweets) {
    // extend our filter array
    $aFilters['tax_query'][] = array (
        'taxonomy'  => 'confectionery',
        'field'     => 'slug',
        'terms'     => array ($sSweets),
    );
}

// filter by product chocolates
if($sChocolates) {
    // extend our filter array
    $aFilters['tax_query'][] = array (
        'taxonomy'  => 'confectionery',
        'field'     => 'slug',
        'terms'     => array ($sChocolates),
    );
}

// filter by product biscuits & snacks
if($sSnacks) {
    // extend our filter array
    $aFilters['tax_query'][] = array (
        'taxonomy'  => 'confectionery',
        'field'     => 'slug',
        'terms'     => array ($sSnacks),
    );
}

// filter by product packaging
if($sPackaging) {
    // extend our filter array
    $aFilters['tax_query'][] = array (
        'taxonomy'  => 'packaging',
        'field'     => 'slug',
        'terms'     => array ($sPackaging),
    );
}

// sorting select contents array
$aSorting = array (
    'newest'        => 'Latest products',
    'oldest'        => 'Oldest products',
    'product_asc'   => 'Product A-Z',
    'product_desc'  => 'Product Z-A'
);

if(User::logged_in()) {
    // show price sorting in the dropdown
    $aSorting['price_highest']  = 'Price high-low';
    $aSorting['price_lowest']   = 'Price low-high';
}

// determine our sorting filters
switch($sSorting) {

    case 'product_asc':
        $aFilters['orderby']    = 'title';
        $aFilters['order']      = 'ASC';
        break;

    case 'product_desc':
        $aFilters['orderby']    = 'title';
        $aFilters['order']      = 'DESC';
        break;

    case 'price_highest':
        $aFilters['meta_key']   = 'product_starting_price';
        $aFilters['orderby']    = 'meta_value_num';
        $aFilters['order']      = 'DESC';
        break;

    case 'price_lowest':
        $aFilters['meta_key']   = 'product_starting_price';
        $aFilters['orderby']    = 'meta_value_num';
        $aFilters['order']      = 'ASC';
        break;

    case 'oldest':
        $aFilters['orderby']    = 'date';
        $aFilters['order']      = 'ASC';
        break;

    case 'latest':
        $aFilters['orderby']    = 'date';
        $aFilters['order']      = 'DESC';
        break;

    case 'random':
    default:
        $aFilters['orderby']    = 'Rand';
        $aFilters['order']      = 'DESC';
        break;
}

// build our product object
$oProducts = new WP_Query($aFilters);


Donc tout ce qui précède fonctionne parfaitement. Chaque requête renvoie les résultats corrects.

Cependant, sur la requête cat, j'ai remarqué que le chargement de la page prenait un peu plus de temps que les autres requêtes.

Alors j'ai vérifié ma console réseau et c'est ce qui se passe ...

products?cat=eco-range

enter image description here

Comme vous pouvez le voir ci-dessus, il charge deux fois. Cela n'a aucun sens?


Voir ci-dessous les résultats de mon réseau sur mes autres requêtes, qui sont toutes identiques, comme elles devraient être.

products?sweets=millions

enter image description here

products?packaging=gift-box-midi

enter image description here

products?search=110201

enter image description here



Si quelqu'un a une idée de la raison pour laquelle cela pourrait se produire ou peut m'aider à résoudre ce problème. Ce serait génial.

Merci d'avance.


Malheureusement, la réponse de Chris n'a apporté aucun changement. Voir la mise à jour modifiée

Ma catégorie personnalisée est maintenant enregistrée en tant que prod_cat et mon URL var est également définie sur prod_cat afin de ne pas entrer en conflit avec les termes réservés.

https://codex.wordpress.org/Reserved_Terms

https://codex.wordpress.org/WordPress_Query_Vars

Voici ma requête mise à jour sur mon page-products.php .

// get our filter params
$sCategory = CF::getVar('prod_cat', false);

// build our basic filters
$aFilters = array (
    'post_type'         => 'product',
    'post_status'       => 'publish',
    'posts_per_page'    => 100,
    'orderby'           => 'ASC',
    'tax_query'         => array (
        'relation'          => 'AND',
    )
);

// filter by product prod_cat
if($sCategory) {
    // extend our filter array
    $aFilters['tax_query'][] = array (
        'taxonomy'  => 'prod_cat',
        'field'     => 'slug',
        'terms'     => array ($sCategory),
    );
}

Et son chargement encore deux fois dans la console réseau.

enter image description here


Cela n'a aucun sens.

1
joshmoto

Je pense que c’est parce que cat est un paramètre de requête réservé. Essayez de le changer pour un nom différent comme "catégorie" ou simplement "c".

Si vous comparez les deux URL avant et après la redirection, sont-elles identiques ou légèrement modifiées?

1
Chris