如何从wordpress ajax搜索表单中获取数据?
我的表单html代码,其中设置了操作和属性名称如何从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
<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
}