Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从wordpress ajax搜索表单中获取数据?_Ajax_Wordpress - Fatal编程技术网

如何从wordpress ajax搜索表单中获取数据?

如何从wordpress ajax搜索表单中获取数据?,ajax,wordpress,Ajax,Wordpress,我的表单html代码,其中设置了操作和属性名称 <div class="search_form"> <form action="<?php esc_url( home_url( '/' ) ); ?>" method="POST"> <input type="text" name="s" value="<?php g

我的表单html代码,其中设置了操作和属性名称

<div class="search_form">
    <form action="<?php esc_url( home_url( '/' ) ); ?>" method="POST">
        <input type="text" name="s" value="<?php get_search_query(); ?>" placeholder="Search...">
        <input type="submit" value="Send">
    </form>
</div>

在ajax搜索中,获取nonce、set action和set url

jQuery(function ($) {
    $('.search_form input[name="s"]').on('keyup', function () {
        let search = $('.search_form input[name="s"]').val();
        if (search.length < 4) {
            return false;
        }
        let data = {
            s: search,
            action: 'search_action',
            nonce: search_form.nonce

        };
        $.ajax({
            url: search_form.url,
            data: data,
            type: 'POST',
            dataType: 'json',
            beforeSend: function (xhr) {
            },
            success: function (data) {
                console.log(data);
            }
        });

    });
});
jQuery(函数($){
$('.search_form input[name=“s”]')。在('keyup',函数(){
let search=$('.search_form input[name=“s”]').val();
如果(search.length<4){
返回false;
}
让数据={
s:搜索,
行动:“搜索行动”,
nonce:search\u form.nonce
};
$.ajax({
url:search_form.url,
数据:数据,
键入:“POST”,
数据类型:“json”,
发送前:函数(xhr){
},
成功:功能(数据){
控制台日志(数据);
}
});
});
});
在functions.php中,我想看看$u POST中的内容。 该操作与search-ajax.js中的操作相同

add_action( 'wp_ajax_search_action', 'esp_search_ajax_action_callback' );
add_action( 'wp_ajax_nopriv_search_action', 'esp_search_ajax_action_callback' );
function esp_search_ajax_action_callback() {
    /**
     * Проверяем нонсе из массива пости и из wp_localize script
     */
    if(!wp_verify_nonce($_POST['nonce'], 'search-nonce')){
        wp_die('Данные пришли с левого адреса');
    }
    $_POST = filter_input_array( INPUT_POST, FILTER_SANITIZE_STRING );
    $args = [
        'post_type' => ['post', 'product'],
        'post_status' => 'public',
        's' => $_POST['s'],
    ];

    $query_ajax = new WP_Query($args);
    ?>
    <?php if($query_ajax->have_posts()): ?>
        <?php while($query_ajax->have_posts()): ?>
            <?php $query_ajax->the_post(); ?>
            <h3 class="title-search"><?php the_title(); ?></h3>
        <?php endwhile; ?>
        <?php wp_reset_postdata(); ?>
    <?php endif; ?>

<?php
}

add_action('wp_ajax_search_action'、'esp_search_ajax_action_callback');
添加操作(“wp\u ajax\u nopriv\u search\u action”、“esp\u search\u ajax\u action\u callback”);
函数esp\u search\u ajax\u action\u callback(){
/**
*ПППППииззззззззззззаззwpз本地化脚本
*/
如果(!wp_verify_nonce($_POST['nonce'],'search nonce')){
wpаU模具(‘Пааааааааааааааа1072;
}
$\u POST=filter\u input\u数组(input\u POST,filter\u SANITIZE\u字符串);
$args=[
“post_type”=>[“post”,“product”],
“post_状态”=>“公共”,
's'=>$\u POST['s'],
];
$query\u ajax=新的WP\u查询($args);
?>

看起来你有一些事情要做。试试这些:

  • dataType
    是您希望返回的数据类型。您没有返回有效的JSON,因此它失败并出现解析错误(即没有成功,没有console.log)
  • vardump
    可能应该是
    var\u dump
    ,除非您在其他地方定义了它。否则,这可能会导致错误并发回错误字符串(这同样不是有效的JSON)
  • 虽然不一定是您要问的问题,但您也应该使用
    wp_die();
    完成回调,并传递您的情况所需的任何参数
如果需要,您可以在测试时将
dataType
切换到
html

您还可以添加error(查看错误是什么)和complete(查看它实际返回)回调

为了安全起见,您可能希望使用以下内容过滤
$\u POST
数据:

$\u POST=filter\u input\u数组(input\u POST,filter\u SANITIZE\u字符串);

或者任何适合您情况的过滤器。

谢谢Phil F。好的,我使用html,在html中的数据之后得到0。我从functions.php更新了代码。我忘了在最后添加wp_die。
add_action( 'wp_ajax_search_action', 'esp_search_ajax_action_callback' );
add_action( 'wp_ajax_nopriv_search_action', 'esp_search_ajax_action_callback' );
function esp_search_ajax_action_callback() {
    /**
     * Проверяем нонсе из массива пости и из wp_localize script
     */
    if(!wp_verify_nonce($_POST['nonce'], 'search-nonce')){
        wp_die('Данные пришли с левого адреса');
    }
    $_POST = filter_input_array( INPUT_POST, FILTER_SANITIZE_STRING );
    $args = [
        'post_type' => ['post', 'product'],
        'post_status' => 'public',
        's' => $_POST['s'],
    ];

    $query_ajax = new WP_Query($args);
    ?>
    <?php if($query_ajax->have_posts()): ?>
        <?php while($query_ajax->have_posts()): ?>
            <?php $query_ajax->the_post(); ?>
            <h3 class="title-search"><?php the_title(); ?></h3>
        <?php endwhile; ?>
        <?php wp_reset_postdata(); ?>
    <?php endif; ?>

<?php
}