Woocommerce实时Ajax搜索调用admin-ajax.php返回500错误如何解决
问题解决方法
你遇到的500错误是代码存在多处PHP语法/规范错误、WooCommerce调用规则错误导致的,修改方案如下:
错误点说明
- 变量未初始化:直接给
$tax_query[]赋值前未定义数组变量,PHP会抛出错误 WC_Product_Query参数错误:不需要指定post_type,posts_per_page参数不适用于该查询类,产品可见性的过滤规则不完整- 产品ID调用不符合WooCommerce规范:3.0+版本不能直接访问产品对象的
id属性,必须调用get_id()方法,该问题是触发500错误的核心原因 - 前端函数名冲突:自定义的
fetch()函数和浏览器原生Fetch API重名,会导致请求异常
修改后的完整代码
HTML代码
<input type="text" name="keyword" id="keyword" onkeyup="fetch_search_results()"> <div id="datafetch">搜索结果将展示在此处</div>
主题functions.php代码
add_action( 'wp_footer', 'ajax_fetch' ); function ajax_fetch() { ?> <script type="text/javascript"> function fetch_search_results(){ jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', type: 'post', data: { action: 'data_fetch', keyword: jQuery('#keyword').val() }, success: function(data) { jQuery('#datafetch').html( data ); } }); } </script> <?php } add_action('wp_ajax_data_fetch' , 'data_fetch'); add_action('wp_ajax_nopriv_data_fetch','data_fetch'); function data_fetch(){ // 关键词非空才执行查询 if( empty($_POST['keyword']) ) { echo ''; die(); } // 初始化查询数组 $tax_query = array( array( 'taxonomy' => 'product_visibility', 'field' => 'name', 'terms' => 'exclude-from-search', 'operator' => 'NOT IN' ) ); $query = new WC_Product_Query( array( 'tax_query' => $tax_query, 'limit' => -1, 's' => sanitize_text_field( $_POST['keyword'] ), 'status' => 'publish' ) ); $products = $query->get_products(); if( !empty($products) ) { foreach( $products as $product ) { echo '<a href="'. get_permalink($product->get_id()) .'">'. $product->get_name() .'</a><br>'; } } else { echo '未找到匹配产品'; } die(); }
内容的提问来源于stack exchange,提问作者Ferhat
相关产品推荐
相关产品推荐

