このナレッジは次のリクエストに応じ投稿されました
デフォルトではor条件ですが、複数のチェックボックスフィルターがある場合、フィルター間では『and』設定となるのでややこしいです。
すべてand条件にできませんか?
JetSmartFiltersのCheckboxs listでは、Data Sourceが『Taxonomies』の場合Relational Operatorで『Intersection』を選択することができますがData SourceがCustom Content TypesやGlossaryの場合はRelational Operatorがありません。
次のコードをfunctions.phpに追加します。
<?php add_filter( 'jet-smart-filters/query/final-query', function ($query) { if ( ! isset( $query['meta_query'] ) || ! function_exists( 'jet_engine' ) ) { return $query; } foreach ( $query['meta_query'] as $index => $meta_query_item ) {
if ( false !== strpos( $query['meta_query'][ $index ]['key'], 'checkbox_and__' ) ) {
$meta_key = explode( '__', $query['meta_query'][ $index ]['key'] )[1];
$query['meta_query'][ $index ]['key'] = $meta_key;
} else {
continue;
}
if ( ! is_array( $query['meta_query'][ $index ]['value'] ) ) {
$values = array( $query['meta_query'][ $index ]['value'] );
} else {
$values = $query['meta_query'][ $index ]['value'];
}
$regexp_query['relation'] = 'AND';
$i = 0;
foreach ( $values as $value ) {
$value = preg_quote( $value );
$regexp = ':['"]?' . $value . '['"]?;s:4:"true"|:['"]?' . $value . '['"]?;[^s]';
$regexp_query[ $i ] = array(
'key' => $meta_key,
'value' => $regexp,
'compare' => 'REGEXP',
);
$i = $i + 1;
}
$query['meta_query'][ $index ] = $regexp_query;
}
return $query;
}, 999 );
出典
https://gist.github.com/Crocoblock/d2ca4ca7fb8e22d1ab7e466a87a71337
フィルターの設定で『is Checkbox Meta Field(Jet Engine)』を無効にします。
Query Variableに『checkbox_and__meta_key』と入力します。この時『meta_key』は該当のメタキーに置き換えてください。
以上でand条件になります。
Listing Gridを使用している場合ではCustom Queryを使用する場合が多くあります。この時Query Builderで作成したQuery IDと、Elementorで配置したListing GridのCSS ID及びFilterのQuery IDを正しく一致させてください。
これは分かりません。
私は最初チェックボックスフィルターがor条件なのに、複数フィルター間ではand条件であることに戸惑い利便性が悪いと感じました。
しかし、チェックボックスフィルターがand条件であるよりもor条件である方が理にかなっている気もします。
これは本当に分かりません。
同時設置のフィルター数やサイトの特性に合わせ相応しい方を選択すると良いと思います。
441-8102
愛知県豊橋市山田一番町120
0120-115-118