ナレッジ
Myページ

ナレッジ・ベース

- 公開 -
リクエスト

このナレッジは次のリクエストに応じ投稿されました

JetFiltersのチェックボックスフィルターで『or』条件を『and』条件にしたい

デフォルトではor条件ですが、複数のチェックボックスフィルターがある場合、フィルター間では『and』設定となるのでややこしいです。

すべてand条件にできませんか?

通知設定
通知
guest
0 コメント
Inline Feedbacks
View all comments
リクエスト
編集中
修正依頼
有効
精査中
無効
issue&solution, HowTo
JetSmartFiltersのチェックボックスフィルターが『or条件』なのを『and』条件に変更する方法
2024-02-01
UITS_尾藤

JetSmartFiltersの仕様

JetSmartFiltersのCheckboxs listでは、Data Sourceが『Taxonomies』の場合Relational Operatorで『Intersection』を選択することができますがData SourceがCustom Content TypesやGlossaryの場合はRelational Operatorがありません。

Custom Content TypesやGlossaryでand条件にする方法

PHPコードの追加

次のコードを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』は該当のメタキーに置き換えてください。

JetSmartFiltersのチェックボックスフィルターでor条件をand条件にする方法

以上でand条件になります。

Listing Gridを使用の場合で設定がうまく行かない時の注意事項

Listing Gridを使用している場合ではCustom Queryを使用する場合が多くあります。この時Query Builderで作成したQuery IDと、Elementorで配置したListing GridのCSS ID及びFilterのQuery IDを正しく一致させてください。

『or条件』『and条件』どちらがユーザーにとって便利なのか

これは分かりません。

私は最初チェックボックスフィルターがor条件なのに、複数フィルター間ではand条件であることに戸惑い利便性が悪いと感じました。

しかし、チェックボックスフィルターがand条件であるよりもor条件である方が理にかなっている気もします。

これは本当に分かりません。

同時設置のフィルター数やサイトの特性に合わせ相応しい方を選択すると良いと思います。









使

植田屋ITソリューション - 急募
修正依頼
修正依頼はありません

当記事に誤りや不足がございましたでしょうか。
ご指摘いただけますと幸いです。よろしくお願いいたします。

タイトル *
内容 *
修正が必要な箇所やその理由などをお伝えください
  • 修正依頼のタイトル及び内容は公開されます。
  • タイトル及び内容は編集させていただく場合がございます。
  • 送信の内容に関しご連絡させていただく場合がございます。
  • 修正依頼への対応が意にそぐわない場合もございますこと予めご承知おきください。
0
Would love your thoughts, please comment.x