web-dev-qa-db-ja.com

私のカスタムクエリの1つでurl var呼び出しページによるカスタムページアーカイブクエリ?

これは非常に奇妙な問題です。私はできるだけ簡単にそれを分解しようとします。

私は独自のカスタムページクエリを作成しています。これは、クエリ結果をカスタマイズするためにurl変数を使用したアーカイブのように機能します。


これは私の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;
}


これは私の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);


だから上記のすべてが絶対にうまく働いています。各クエリは正しい結果を返します。

しかし、catクエリでは、ページのロードに他のクエリよりも少し時間がかかりました。

だから私は自分のネットワークコンソールをチェックし、これが起こっていることです...

products?cat=eco-range

enter image description here

あなたはその積載量の上に二度見ることができるように。これは意味がありませんか?


私の他の質問に対する私のネットワークの結果を以下に見てください。

products?sweets=millions

enter image description here

products?packaging=gift-box-midi

enter image description here

products?search=110201

enter image description here



誰もがなぜこれが起こり得るのか、または私がこの問題を解決するのを手助けすることができるかに関して何か考えを持っているならば。それは素晴らしいことです。

前もって感謝します。


残念ながら、クリスの答えは何もしませんでした。更新された変更を見る

私のカスタムカテゴリはprod_catとして登録され、私のurl varもprod_catに設定されているので、予約語と矛盾しません。

https://codex.wordpress.org/Reserved_Terms

https://codex.wordpress.org/WordPress_Query_Vars

これが私の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),
    );
}

それでもまだネットワークコンソールに2回ロードされています。

enter image description here


これは意味がありません。

1
joshmoto

これはcatが予約済みのクエリパラメータであるためです。 「category」または単に「c」のような別の名前に変更してみてください。

リダイレクト前後の2つのURLを比較した場合、それらは同じか、わずかに変更されていますか?

1
Chris