web-dev-qa-db-ja.com

どのようにプラグインなしでWordpressのバックエンドでカスタム検索をするのですか?

Sim_nuipというカスタムフィールドを持つusr_jardinという投稿タイプがあります。投稿のタイトルとカスタムフィールドでも検索が機能するようにしたいです。私はこれを試してみますが、私にはうまくいきません。

function searchfilter($query)
{
    $custom_fields = array("_post_title", "nuip");
    $searchterm = $query->query_vars['s'];
    $query->query_vars['s']="";

    if($searchterm != "")
    {
        $meta_query = array('relation' => 'OR');

        foreach($custom_fields as $cf)
        {
            array_Push($meta_query, array('key'=> $cf,'value'=> $searchterm,'compare'=> 'LIKE'));
        }

        $query->set("meta_query", $meta_query);
    }

    if($query->is_search)
    {
        $query->set('post_type', array('post', 'usr_jardin'))
    }
    return $query;
}

add_filter('pre_get_posts','searchfilter');
add_action('save_post','add_title_custom_field');

function add_title_custom_field($postid){
    update_post_meta($postid, "_post_title", $_POST["post_title"]);
}
1
user3598584

pre_get_postsはアクションであり、フィルタではありません。これを変更してください。

add_filter('pre_get_posts','searchfilter');

これに:

add_action('pre_get_posts','searchfilter');

$queryを返す必要もありません。

Pre_get_postsのドキュメントを参照してください。 http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

1
danielck