使用元关键字进行自动搜索/自动完成搜索

时间:2018-07-31 作者:marvinpoo

目前,我一直在进行房地产搜索。

我试图做的事情听起来很简单:我在搜索表单中有一个字段。我希望该字段能够对输入生成自动建议/自动完成/自动预测,例如:

Person在柏林夏洛滕堡(Charlottenburg)搜索一个不错的阁楼,因此他们选择自己的选项,然后输入“Char”。输入将显示包含该名称的选项,如“Charlottenburg”(部分)或“Charlottenburg Wilmersdorf”(地区)。

我已经找到了几种在wordpress中创建预测的方法,但我的方法目前搜索给定自定义帖子类型的所有帖子,只突出显示包含标题输入的帖子。

我想要的是,预测是寻找三个元键的元值,并且只显示包含搜索请求的元值的预测。


tl;dr:当前状态:

输入:CharPrediction标题:柏林干净阁楼,非常char曼特之家,市中心的房子

通缉状态:

输入:CharPrediction META\\u值:Char洛滕堡,Char洛滕堡-威尔默斯多夫

--

这是我当前的代码:

功能。php:

<?php
/**
 * Enqueue scripts and styles.
 *
 * @since 1.0.0
 */
function ja_global_enqueues() {
    wp_enqueue_style(
        \'jquery-auto-complete\',
        \'https://cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.css\',
        array(),
        \'1.0.7\'
    );
    wp_enqueue_script(
        \'jquery-auto-complete\',
        \'https://cdnjs.cloudflare.com/ajax/libs/jquery-autocomplete/1.0.7/jquery.auto-complete.min.js\',
        array( \'jquery\' ),
        \'1.0.7\',
        true
    );
    wp_enqueue_script(
        \'global\',
        get_template_directory_uri() . \'/js/prediction.js\',
        array( \'jquery\' ),
        \'1.0.0\',
        true
    );
    wp_localize_script(
        \'global\',
        \'global\',
        array(
            \'ajax\' => admin_url( \'admin-ajax.php\' ),
        )
    );
}
add_action( \'wp_enqueue_scripts\', \'ja_global_enqueues\' );
/**
 * Live autocomplete search feature.
 *
 * @since 1.0.0
 */
function ja_ajax_search() {
    $results = new WP_Query( array(
        \'post_type\'     => array( \'immomakler_object\' ),
        \'nopaging\'      => true,
        \'posts_per_page\'=> 100,
    \'meta_query\'    => array (
      \'relation\'    => \'AND\',
      array(
        \'relation\' => \'AND\',
        array(
          \'key\'         => \'verkaufstatus\',
          \'value\'       => \'VERKAUFT\',
          \'compare\' => \'!=\'
        )
      )
    )
    ) );
    $items = array();
    if ( !empty( $results->posts ) ) {
        foreach ( $results->posts as $result ) {
            $items[] = $result->post_title;
        }
    }
    wp_send_json_success( $items );
}
add_action( \'wp_ajax_search_site\',        \'ja_ajax_search\' );
add_action( \'wp_ajax_nopriv_search_site\', \'ja_ajax_search\' );

?>
。js公司

jQuery(function($){
    var searchRequest;
    $(\'.prediction\').autoComplete({
        minChars: 3,
        source: function(term, suggest){
            try { searchRequest.abort(); } catch(e){}
            searchRequest = $.post(global.ajax, { search: term, action: \'search_site\' }, function(res) {
                suggest(res.data);
            });
        }
    });
});
我的自定义帖子类型是:immomakler_object我希望搜索值的自定义meta\\u键包括:PLZ, ort, regionaler_zusatz

1 个回复
最合适的回答,由SO网友:nmr 整理而成

如果要显示自定义字段值,则不能使用选择帖子的WP\\U查询
在我看来,唯一可用的方法是编写sql查询并在中执行它$wpdb.

global $wpdb;

if ( isset($_POST[\'search\']) == false || empty($_POST[\'search\']) ) 
   wp_send_json_success( $array() ); 
$s = $_POST[\'search\'];

$meta_keys = [\'PLZ\', \'ort\', \'regionaler_zusatz\'];
$limit = 100;
$sql = "SELECT meta_value FROM $wpdb->postmeta pm "
      . " WHERE pm.meta_key IN (\'PLZ\', \'ort\', \'regionaler_zusatz\') "
      . "    AND pm.meta_value LIKE %s LIMIT 0, %d ";
$args = [\'%\'.$s.\'%\', $limit];
$sql = $wpdb->prepare($sql, $args);
$res = $wpdb->get_results($sql, ARRAY_A);

$data = [];
if ( is_array($res) && !empty($res) ) {
   foreach( $res as $row )
       $data[] = $row[\'meta_value\'];
   // -- or --
   //$data = array_reduce($res, function($carry, $item) {
   //    $carry[] = $item[\'meta_value\'];
   //    return $carry;
   //}, []);
}
wp_send_json_success( $data );
如果不存储在自定义字段中(PLZ, ort, regionaler_zusatz) 单个值,您可能需要从数组中选择匹配项。

结束

相关推荐

Tags as autocomplete values

如何将常规post标记作为自动完成字段的值加载?我现在得到的是这样的预设值:var data = {items: [ {value: \"1\", name: \"Siemens\"}, {value: \"2\", name: \"Phillips\"}, {value: \"3\", name: \"Whirlpool\"}, {value: \"4\", name: \"LG\"} }; $(\"#input_1_3\").autoSuggest(da