从所有字段或仅一个字段的搜索中获取结果

Posted

技术标签:

【中文标题】从所有字段或仅一个字段的搜索中获取结果【英文标题】:Get results from a search by all fields or just one field 【发布时间】:2018-07-31 08:43:33 【问题描述】:

我在尝试制作表单并在我的 wordpress 博客中搜索自定义类型时遇到了麻烦,我的 functions.php 文件中有以下表单...

add_action('init', 'create_post_type');
function create_post_type() 
    register_post_type( 'terapeutas',
        array(
            'labels'=>array(
                'name'=> __('Terapeutas' ),
                'singular_name'=> __('Terapeuta' )
            ),
            'public'=>true,
            'has_archive'=>true,
        )
    );



function terapeuta_search_scripts()
wp_enqueue_script('terapeutas', get_stylesheet_directory_uri() . '/js/terapeutas.js', array(), '1.0.0', true);
wp_localize_script('terapeutas', 'ajax_url', admin_url('admin-ajax.php'));


function terapeuta_search()
terapeuta_search_scripts();

ob_start();
?>
<div id="bed-search">
    <form action="" method="get">
        <input placeholder="Pesquise um nome..." id="terapeuta-nome" type="text" name="terapeuta-nome" />
        <select id="terapeuta-estado" name="terapeuta-estado">
            <option value="" selected="selected">Estados</option>
            <option value="AL">AL</option>
            <option value="BA">BA</option>
            <option value="CE">CE</option>
            <option value="DF">DF</option>
            <option value="GO">GO</option>
            <option value="MG">MG</option>
            <option value="MS">MS</option>
            <option value="MT">MT</option>
            <option value="RJ">RJ</option>
            <option value="RN">RN</option>
            <option value="RS">RS</option>
            <option value="SP">SP</option>
            <option value="SC">SC</option>
            <option value="PR">PR</option>
        </select>
        <select id="terapeuta-cidade" name="terapeuta-cidade">
            <option value="" selected="selected">Cidades</option>
            <option value="Armação dos Búzios">Armação dos Búzios</option>
            <option value="Atibaia">Atibaia</option>
            <option value="Belo Horizonte">Belo Horizonte</option>
            <option value="Brasília">Brasília</option>
            <option value="Bueno Brandão">Bueno Brandão</option>
            <option value="Campinas">Campinas</option>
            <option value="Campos do Jordão">Campos do Jordão</option>
            <option value="Cianorte">Cianorte</option>
            <option value="Curitiba">Curitiba</option>
            <option value="Chapecó">Chapecó</option>
            <option value="Delfim Moreira">Delfim Moreira</option>
            <option value="Florianópolis">Florianópolis</option>
            <option value="Foz do Iguaçu">Foz do Iguaçu</option>
            <option value="Garça">Garça</option>
            <option value="Guarantã do Norte">Guarantã do Norte</option>
            <option value="Ilhabela">Ilhabela</option>
            <option value="Maceió">Maceió</option>
            <option value="Maracaju">Maracaju</option>
            <option value="Miguel Pereira">Miguel Pereira</option>
            <option value="Morungaba">Morungaba</option>
            <option value="Natal">Natal</option>
            <option value="Piratininga">Piratininga</option>
            <option value="Porto Alegre">Porto Alegre</option>
            <option value="Rio de Janeiro">Rio de Janeiro</option>
            <option value="Santana de Parnaíba">Santana de Parnaíba</option>
            <option value="São Paulo">São Paulo</option>
            <option value="Santo André">Santo André</option>
            <option value="Sinop">Sinop</option>
            <option value="Sorocaba">Sorocaba</option>
            <option value="Ubatuba">Ubatuba</option>
            <option value="Uruçuca">Uruçuca</option>
            <option value="Uberlândia">Uberlândia</option>
            <option value="Volta Redonda">Volta Redonda</option>
        </select>
        <button type="submit">Buscar Terapeuta</button>
    </form>

    <ul style="list-style-type:none;"></ul>

</div>
<?php
return ob_get_clean();

而我的js文件内容是:

$ = jQuery;

var bedSearch = $("#bed-search");
var searchForm = bedSearch.find("form");

searchForm.submit(function(e)
e.preventDefault();

    var data = 
        action : "terapeuta_search",
        nome : bedSearch.find("#terapeuta-nome").val(),
        estado : bedSearch.find("#terapeuta-estado").val(),
        cidade : bedSearch.find("#terapeuta-cidade").val()
    ;
    $.ajax(
        url : ajax_url,
        data : data,
        success : function(response)
            bedSearch.find("ul").empty();
            for(var i = 0; i < response.length; i++)
                console.log(response[i]);
                var html = "<li id='terapeuta-" + response[i].id + "'><a style='color:orange;' href='" + response[i].permalink + "'>" + response[i].nome + "</a></li>";
                bedSearch.find("ul").append(html);
            
        
    );
);

目前我的搜索仅在我填写所有字段 [Name+City+State] 时才有效,但我需要能够搜索也只填写其中一个字段。

例如:如果我只想按城市搜索,我只想显示这个城市的 Tearapeutas... http://assttic.org/wp-admin/admin-ajax.php?action=terapeuta_search&nome=&estado=DF&cidade= 在这种情况下,我得到了一个这样的查询字符串:

action: terapeuta_search
cidade: 
estado: DF
nome:

但是json响应是空的

Ex2:如果我想按州和城市搜索,那会显示来自这个州和城市的所有 terapeutas...

PS:我没有碰我的db文件,作为wordpress的新手,我只是按照互联网上的教程,这些代码行是我唯一写的......

【问题讨论】:

【参考方案1】:

这个问题需要更多信息。我们不知道您的后端代码是如何工作的。

您是否尝试过使用邮递员并仅使用部分参数发送请求?网络请求是什么样的?您是否在 chrome 开发工具中设置了断点并在发送请求之前检查了数据对象?

【讨论】:

以上是关于从所有字段或仅一个字段的搜索中获取结果的主要内容,如果未能解决你的问题,请参考以下文章

如何从所有文本字段中获取所有值

ES搜索结果中各个字段介绍

基于模型实例获取学说结果

ElasticSearch - SpringBoot整合ES:解析搜索返回字段

从一个表单字段获取条目并在数据库中搜索其对应数据并自动填写表单中的其他字段

如何使用附加过滤的相关对象作为 Django 中的字段来获取结果?