自定义帖子类型、自定义元和搜索字段的自定义搜索

时间:2013-07-08 作者:James J

我想为特定的自定义帖子类型(vehicle)构建一个搜索表单,并对该自定义帖子类型的自定义元字段(price、age)和自定义分类法(make)进行筛选。这将完全取代网站搜索,成为唯一可用的搜索,所以我打算使用搜索。php在我的自定义模板中。

我希望搜索看起来像:

Search our vehicles

Make (选择包含所有自定义分类的框-奥迪、宝马等)。

Model (供人们键入任何内容的正常输入字段)。

Prices over (选择价格从1000开始的框)

Age (选择带有选项的框,例如1年以下、3年以下、5年以下、10年以下)。

我不熟悉自定义字段,不知道从哪里开始(我在谷歌上找到了一些例子,但没有一个能完全实现我的目标)。我也不想使用插件。我在搜索范围内猜测。php我从表单中获取传递的数据,并使用它构建$args,以传递给WP\\u Query?

有人能给我指一下正确的方向吗?提前感谢

2 个回复
SO网友:kaiser

如果要扩展查询,应通过pre_get_posts-滤器那就做一个"Custom Field" or meta query.

add_action( \'pre_get_posts\', \'wpse105969_extended_search\' );
function wpse105969_extended_search( $query )
{
    // Make sure we got a search query
    // and we\'re only modifying the main query.
    if (
        ! $query->is_main_query()
        AND \'\' === $query->get( \'s\' )
        AND \'your_custom_post_type\' === $query->get( \'post_type\' )
    )
        return $query;

    // Alter whatever you need: Make, Model, etc.
    $query->set( \'meta_query\', array(
        \'relation\' => \'OR\',
        array(
            \'key\'     => \'color\',
            \'value\'   => \'blue\',
            \'compare\' => \'NOT LIKE\'
        ),
        array(
            \'key\'     => \'price\',
            \'value\'   => array( 20, 100 ),
            \'type\'    => \'numeric\',
            \'compare\' => \'BETWEEN\'
        )
    ) );

    return $query;
}

SO网友:Purvik Dhorajiya

这是代码。你可以改变$post_type$custom_fields 根据您的需要。

function extend_admin_search( $query ) {

    // Extend search for document post type
    $post_type = \'document\';
    // Custom fields to search for
    $custom_fields = array(
        "_file_name",
    );

    if( ! is_admin() )
        return;

    if ( $query->query[\'post_type\'] != $post_type )
        return;

    $search_term = $query->query_vars[\'s\'];

    // Set to empty, otherwise it won\'t find anything
    $query->query_vars[\'s\'] = \'\';

    if ( $search_term != \'\' ) {
        $meta_query = array( \'relation\' => \'OR\' );

        foreach( $custom_fields as $custom_field ) {
            array_push( $meta_query, array(
                \'key\' => $custom_field,
                \'value\' => $search_term,
                \'compare\' => \'LIKE\'
            ));
        }

        $query->set( \'meta_query\', $meta_query );
    };
}

add_action( \'pre_get_posts\', \'extend_admin_search\' );

结束

相关推荐

Search posts by Tag

我希望我的搜索表单只显示按标记组织的结果。我知道你可以添加&tag=TAGNAME 但如何将其集成到表单中,以便我的网站只搜索包含与搜索框中输入的内容相同的标记的帖子?我在页面上有两个搜索,因此理想情况下,我希望能够通过HTML将其添加到表单中,而不是其他任何地方,但任何答案都可以:)谢谢