调用wc_get_orders()报错:未定义函数问题求助
解决Woocommerce中
wc_get_orders()未定义错误 问题描述
调用Woocommerce的wc_get_orders()函数时触发错误:Uncaught Error: Call to undefined function wc_get_orders(),核心代码逻辑如下:
if(isset($_GET['inicio']) ){ $initial_date = $_GET['inicio']; $final_date = $_GET['fin']; $orders = wc_get_orders(array( 'limit'=>-1, //'type'=> 'shop_order', 'orderby' => 'date', 'order' => 'DESC', 'status'=> array( 'wc-processing' ), 'date_created'=> $initial_date .'...'. $final_date, 'return' => 'ids', ));/**/ $fechas="de ".$initial_date." a ".$final_date; }else{ $orders = wc_get_orders(array( 'limit' => 10, 'orderby' => 'date', 'order' => 'DESC', 'status'=> array( 'wc-processing' ), 'return' => 'ids', )); $fechas="(ultimos 10)"; }
完整代码文件位于/wp-admin/目录下。
问题原因
- WordPress与WooCommerce核心未加载:直接访问/wp-admin/下的自定义PHP文件时,未触发WordPress初始化流程,WooCommerce的函数库未被自动包含,导致
wc_get_orders()等函数无法识别。 - 冗余的手动数据库连接:代码中手动连接数据库的操作完全多余,
global $wpdb已可直接调用WordPress的数据库连接,手动连接绕开了WordPress机制,也无法解决核心函数未加载的问题。
解决办法
1. 强制加载WordPress核心文件
在代码最顶部添加以下代码,确保WordPress和WooCommerce的所有核心函数被加载:
<?php // 加载WordPress核心,路径适配/wp-admin/目录下的文件 require_once(__DIR__ . '/../wp-load.php');
2. 移除手动数据库连接代码
删除以下冗余代码,直接使用global $wpdb操作数据库:
global $wpdb; $host_name = $wpdb->dbhost; $database = $wpdb->dbname; $user_name = $wpdb->dbuser; $password = $wpdb->dbpassword; /*conectar bdd WP*/$link = mysqli_connect($host_name, $user_name, $password, $database); if ($link->connect_error) {die("Connection failed: ". $link->connect_error);}else{/* echo "Connected successfully";/**/} /*character set to utf8mb4 */$link->set_charset("utf8mb4");
原代码中的自定义SQL查询,改用$wpdb的安全方法执行(避免SQL注入):
$cp = $order2["shipping"]["postcode"]; // 使用prepare方法安全查询 $row = $wpdb->get_row($wpdb->prepare("SELECT * FROM 0_cp_jo WHERE cp = %s LIMIT 1", $cp)); if ($row) { $barrio = $row->barrio; } else { $barrio = $cp . " c.p. no encontrado"; }
3. 确认WooCommerce已激活
登录WordPress后台,检查WooCommerce插件是否处于激活状态,只有激活后其函数库才会被WordPress加载。
内容的提问来源于stack exchange,提问作者Pablo Ndure
相关产品推荐
相关产品推荐

