これは非常に奇妙な問題です。私はできるだけ簡単にそれを分解しようとします。
私は独自のカスタムページクエリを作成しています。これは、クエリ結果をカスタマイズするために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
あなたはその積載量の上に二度見ることができるように。これは意味がありませんか?
私の他の質問に対する私のネットワークの結果を以下に見てください。
products?sweets=millions
products?packaging=gift-box-midi
products?search=110201
誰もがなぜこれが起こり得るのか、または私がこの問題を解決するのを手助けすることができるかに関して何か考えを持っているならば。それは素晴らしいことです。
前もって感謝します。
残念ながら、クリスの答えは何もしませんでした。更新された変更を見る
私のカスタムカテゴリは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回ロードされています。
これは意味がありません。
これはcatが予約済みのクエリパラメータであるためです。 「category」または単に「c」のような別の名前に変更してみてください。
リダイレクト前後の2つのURLを比較した場合、それらは同じか、わずかに変更されていますか?