• 解決済 kleza

    (@kleza)


    いつも大変お世話になっております。

    カスタムフィールドの値を使った絞込検索(対象はauthor)を実装しようとしています。
    (カスタムフィールドはプラグイン「Types」を使っています)

    対象は投稿や固定ページではなくユーザ(author)で

    こちらのURLを参考に
    http://www.tecking.org/archives/2636

    functions.phpに以下を追加。

    /** カスタム検索 **/
    global $my_public_query_vars;
    $my_public_query_vars = array( 'wpcf-address_pref' /* 検索対象となるフィールドのスラグをカンマ繋ぎで */ );
    
    add_filter( 'query_vars', 'my_query_vars' );
    function my_query_vars( $public_query_vars ) {
        global $my_public_query_vars;
        return array_merge( $public_query_vars, $my_public_query_vars );
    }
    
    add_action( 'pre_get_posts', 'my_pre_get_posts' );
    function my_pre_get_posts( $query ) {
        if ( ! is_admin() && is_post_type_archive( 'author' ) /* && 'staff' == $query->get( 'post_type' ) */ ) {
            $meta_query = array();
    
            global $my_public_query_vars;
            foreach ( $my_public_query_vars as $key ) {
                if ( $val = $query->get( $key ) ) {
                    $meta_query[] = array(
                        'key'   => $key,
    					'value' => $val,
    					'compare' => 'LIKE'
                    );
                }
            }
    
            if ( ! empty( $meta_query ) ) {
                $query->set( 'meta_query', $meta_query );
            }
        }
    }

    検索フォームは

    <form method="get" id="searchform-parking" action="<?php echo esc_url( home_url( '/author/' ) ); ?>">
    	<input type="checkbox" class="field" id="address_pref" name="wpcf-address_pref" value="東京都"/>東京都<br />
    	<input type="submit" class="submit" name="submit" id="searchsubmit-parking" value="検索" />
    </form>

    としています。

    これで検索をしても実際にカスタムフィールド「wpcf-address_pref」に値「東京都」を持つユーザがヒットしません。

    クエリURLは

    WordPressサイトのURL/author/?wpcf-address_pref=東京都&submit=検索

    となっていて、これで「カスタムフィールドwpcf-address_prefに東京都を持っている」ものがヒットすると理解しているのですがヒットせず404が返されます。

    WordPressは浅学で、検索となると今回が初めてのカスタマイズで
    余計にハードルがあがっている状態ですが、アドバイスやご指摘等
    ありましたら何かいただけると大変助かります。

    何卒よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 私も最初は検索機能をカスタマイズするのは不慣れでした。

    まず大前提として、ユーザーはユーザーです。
    投稿とは扱いが違います。

    一番簡単な方法だと、
    著者一覧に関しては別で
    WP_User_Query が用意されています。

    meta_queryも使用できるので、
    POST、又はGETで値をフォームから渡して、meta_queryに入れ、author.phpでループを組む方法が簡単かとは思います。

    ただ個人的には、ユーザー情報にメタ情報を付け加えるよりは、別でカスタム投稿タイプを作成した方がいいんじゃないかなと……
    ( 例えば「プロフィール」という投稿タイプを作る。すると上記の参考URLのサイトでもいけますよね?)

    …..と長々書きましたが、間違っておりましたらすみませんm( _ _ )m

    トピック投稿者 kleza

    (@kleza)

    Ishihara様

    コメントありがとうございます。

    なるほど、自分が実装しようとしていたものでは
    そもそも対象が違っていたのですね。カスタムフィールドを
    指定できればいいのかと単純に考えていました。お恥ずかしい。。

    アドバイスもありがとうございます。

    検索のカスタマイズはもちろんのこと
    WP_User_Queryも扱ったことはありませんが
    まずはIshihara様のアドバイスで試みてみようと思います。

    ユーザ情報へのメタ情報の追加でなくカスタム投稿で
    というアドバイスもわかります。が、本件では
    各ユーザごとにプロフィールを更新できるように
    する必要がありまして。運営側でやることであれば
    もっとスムーズに運べるのですが。

    まずは明後日の方向を向いていたことがわかった
    だけでも助かりました。ありがとうございます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタムフィールドの値を使った絞込検索(対象はauthor)を実装したい」には新たに返信することはできません。