it-swarm.com.de

Benutzerdefinierte Seitenarchivabfrage durch URL var Aufruf der Seite zweimal bei einer meiner benutzerdefinierten Abfragen?

Das ist so ein seltsames Problem. Ich werde versuchen, es so einfach wie möglich zu brechen.

Ich erstelle meine eigene benutzerdefinierte Seitenabfrage, die wie ein Archiv mit URL-Variablen funktioniert, um die Abfrageergebnisse anzupassen.


Dies ist meine getVar() Funktion ...

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

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

    // return our default value
    return $default;
}


Dies ist meine gesamte page-products.php-Abfrage ...

// 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);


Also alles oben funktioniert absolut gut. Jede Abfrage gibt die richtigen Ergebnisse zurück.

Bei der Abfrage cat stellte ich jedoch fest, dass das Laden der Seite etwas länger dauerte als bei den anderen Abfragen.

Also habe ich meine Netzwerkkonsole überprüft und dies ist, was passiert ...

products?cat=eco-range

enter image description here

Wie Sie oben sehen können, wird es zweimal geladen. Das ergibt keinen Sinn?


Unten sehen Sie die Ergebnisse meines Netzwerks für meine anderen Abfragen, die alle einmalig sind, wie sie sein sollten.

products?sweets=millions

enter image description here

products?packaging=gift-box-midi

enter image description here

products?search=110201

enter image description here



Wenn jemand eine Idee hat, warum dies passieren könnte, oder mir bei der Lösung dieses Problems helfen kann. Das wäre toll.

Danke im Voraus.


Leider hat sich an der Antwort von Chris nichts geändert. Siehe die aktualisierte geändert

Meine benutzerdefinierte Kategorie ist jetzt als prod_cat registriert, und meine URL-Variable ist ebenfalls auf prod_cat eingestellt, um keinen Konflikt mit den reservierten Bedingungen zu verursachen.

https://codex.wordpress.org/Reserved_Terms

https://codex.wordpress.org/WordPress_Query_Vars

Hier ist meine aktualisierte Abfrage auf meiner 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),
    );
}

Und es wird immer noch zweimal in der Netzwerkkonsole geladen.

enter image description here


Das ergibt keinen Sinn.

1
joshmoto

Ich glaube, das liegt daran, dass cat ein reservierter Abfrageparameter ist. Ändern Sie den Namen in einen anderen Namen wie "Kategorie" oder "C".

Wenn Sie die beiden URLs vor und nach der Umleitung vergleichen, sind sie gleich oder haben sich geringfügig geändert?

1
Chris