• はじめましてWorpress初心者です。

    フォームのチェックボックスをjavascriptでlocation.hrefなどを使って
    タグ検索をしています。
    例えば次のようなかんじのURLを作っています。
    完全一致http://example.jp/?tag=A+B+C
    部分一致http://example.jp/?tag=A,B,C

    そこで質問なんですが
    例えば部分一致で検索した時タグA、B、Cのどれかが含まれるページにDというタグがあった場合
    タグDがあるページはタグ検索結果から除外したい場合どのようにしたらいいのでしょうか?
    単純にhttp://example.jp/?tag=A,B,C-Dにしたらダメでした。
    なるべくならURL形式でタグDが含まれるページを除外したいです。

    だれか詳しいかたよろしくお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • この機能があると、とても便利だと思うのですが、なかなか回答がつかないので…

    Worpress初心者です。

    PHPがそれなりにわかるという暗黙の了解でレスしてみます。

    query.phpの&get_posts()を眺めてみた(いや~すごく長くて驚いた)のですが、タグについては[tag_slug__in](「,」区切りでOR検索相当)と[tag_slug__and](「+」でAND検索相当)しか実装されていません(しかも同時に「,」「+」の両方は指定できないという…)

    この周辺でフックできるのはpre_get_postsですが、小手先だけで実装するわけにはいかないので、私も「だれか詳しいかたよろしく」という感じです(笑)

    コアコードはいじりたくないですし…

    こんにちは。
    私もあまり詳しくないのですが書き込みます。

    そもそも論になってしまいますが、WordPress のタグのスラッグではハイフン(-)の使用が許可されていますので、 ?tag=A,B,C-D は A タグと B タグと C-D タグという 3 つのタグでリクエストしていると解釈するのが WordPress の挙動として自然です。ダメだったのも無理はないですね。

    新しく除外タグを指定できるようなパラメータを準備し、 kurosquare さんがご指摘の通り pre_get_posts フィルタにて除外処理を行うのがとりあえずの落としどころかと思います。

    以下に例を挙げますが、このコードのセキュリティ上の安全性はかなり怪しく、一切保証できませんので、あくまでヒントとしてお試しになり、感じをつかんだ上で、より安全なコードをご自分の責任で記述してください。また、本当は WP_Rewrite も触れないと、タグで絞り込む任意のループにまで影響するのでわりと問題ありです。ご了承ください。

    以下をお使いのテーマの functions.php に追加し、除外したいタグのスラッグを extag=X+Y+Z などという形式でリクエストします。

    function add_extag_query( $q=array() ) {
        if ( $q->is_tag == false ) return;
        $extag_query = $_GET['extag'];
        if ( !empty( $extag_query ) ) {
            $extags = preg_split( '/[+\s]+/', $extag_query );
            if ( !empty( $extags ) ) {
                $tag__not_in = array();
                foreach ( $extags as $extag ) {
                    $extag = get_term_by( 'slug', $extag, 'post_tag' )->term_id;
                    if ( !empty( $extag ) ) $tag__not_in[] = $extag;
                }
                $q->set( 'tag__not_in', $tag__not_in );
            }
        }
    }
    add_action('pre_get_posts', 'add_extag_query');

    公式ディレクトリにプラグインなどがあれば、そちらを使用される方が良いかと思います。こういうのはありそうな気がします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「タグ検索結果から特定タグを除外」には新たに返信することはできません。