Help us understand the problem. What is going on with this article?

WordPressの有料プラグイン「Search & Filter Pro」に除外検索(NOT IN)を追加する方法

はじめに

複数条件検索を実装できるWordpressの有料プラグインが
1サイト$20と格安だったので購入してみた。

Search & Filter pro
https://searchandfilter.com/

カテゴリ、タグ、カスタムフィールドを自由に組み合わせて
絞り込み検索が手軽に実装になるというプラグインで、
$20にしてはかなり便利なプラグインだと思う。
(デモビデオ:Search & Filter Pro - Demo Video)

早速作成中のWordPressサイトに追加してみたが、
今回実装したかった除外検索(NOT IN)が選択肢にない...

この部分だけ直接PHPを編集して実装してみた。


1.「プラグインエディター」を開く

「ダッシュボード」の左カラムメニュー「プラグイン」内にある
「プラグインエディター」をクリックして、
画面左上の『編集するプラグインを選択』で
「Search & Filter Pro」を選択する。

2.phpに除外検索用のコードを追記する

例えばタグ検索の「Search Operator」に
「AND」「OR」に加えて除外検索用の選択肢を追加する場合、
search-filter-pro/admin/views/fields/tag.php
このファイルの64〜67行目に以下の記述がある。

tag.php
<select name="{0}[{1}][operator]" id="{0}[{1}][operator]">
<option value="and"<?php $this->set_selected($values['operator'], "and"); ?>><?php _e("AND", $this->plugin_slug); ?></option>
<option value="or"<?php $this->set_selected($values['operator'], "or"); ?>><?php _e("OR", $this->plugin_slug); ?></option>
</select>

この部分で「Search Operator」の選択肢に応じて
ユーザーが検索した際の検索方法を指定しているので、

<option value="NOT IN"<?php $this->set_selected($values['operator'], "NOT IN"); ?>><?php _e("NOT IN", $this->plugin_slug); ?></option>

</select>の直前に上記のコードを加えて保存するだけで、
「Search & Filter Pro」の編集画面の「Tag」に
「NOT IN」という選択肢が加わる。
スクリーンショット 2019-12-17 22.18.19.png

tag.php
<select name="{0}[{1}][operator]" id="{0}[{1}][operator]">
<option value="and"<?php $this->set_selected($values['operator'], "and"); ?>><?php _e("AND", $this->plugin_slug); ?></option>
<option value="or"<?php $this->set_selected($values['operator'], "or"); ?>><?php _e("OR", $this->plugin_slug); ?></option>
<option value="NOT IN"<?php $this->set_selected($values['operator'], "NOT IN"); ?>><?php _e("NOT IN", $this->plugin_slug); ?></option>
</select>

あとはプラグインの画面上でいい感じに絞り込み検索を作成して
除外したい項目の「Search Operator」には「NOT IN」を設定しておけば、
想定どおりの絞り込み検索を実装することができる。


タグ以外の項目で同様の選択肢を実装したい場合は...

search-filter-pro/admin/views/fields
上記の場所に「category.php」などそれぞれのPHPファイルがあるので、
「operator」でコード内を検索してみて
「NOT IN」の<option>タグを同様に追記すれば実装できる。


注意点

※ PHPを直接いじるのでバックアップ等は必ず取っておくこと

s_mina
広告代理店にデザイナーとして入社後、 気づけばフロントエンドエンジニアとしてサイト作ったり 業務効率化ツールを作っている何でも屋さん。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした