【发布时间】:2020-12-02 22:40:28
【问题描述】:
我正在为快递服务创建一个插件,以便从 woocommerce 订单管理页面预订和跟踪发货。我正在创建一个列名 Trax,这是代码
add_action( 'manage_shop_order_posts_custom_column', 'trax_value_function', 2 );
function trax_value_function($column) {
if ($column == 'trax') {
global $post;
$data = get_post_meta($post->ID);
$apiKey = get_option('trax_api');
$dvs_courier_tracking = get_post_meta( $post->ID, '_dvs_courier_tracking', true );
//model box
add_thickbox();
echo '<a href="#TB_inline?width=600&height=550&inlineId=modal-window-id" class="thickbox">Track Order</a>';
echo '<div id="modal-window-id" style="display:none;">';
$apiUrl = "https://sonic.pk/api/shipment/track?tracking_number=".$dvs_courier_tracking."&type=0";
$headers = ['Authorization:' . $apiKey, 'Accepts:' . 'application/json'];
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL, $apiUrl);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$buffer = curl_exec($curl);
curl_close($curl);
// Display Trax Courier Tracking;
$data = json_decode($buffer, true);
echo '<div class="dvs-right-50">';
echo '<strong>Tracking Details</strong>';
foreach ($data['details']['tracking_history'] as $a) {
echo '<br>';
echo '<strong>Date: </strong>' . $a['date_time'];
echo '<br>';
echo '<strong>Status: </strong>' . $a['status'];
echo '<br>';
echo '<strong>Reason: </strong>' . $a['status_reason'];
echo '<br>';
}
echo '</div>';
}
}
代码工作正常并给我输出,但它使 Woocommerce 管理订单页面非常慢 当我访问此链接时 https://mywebsite.com/wp-admin/edit.php?post_type=shop_order
加载页面需要很长时间,因为每个订单 curl api 都会运行并捕获 json 数据。 我想当我点击“跟踪订单”按钮然后 curl 命令运行并在thickbox中显示数据。
请帮忙。
【问题讨论】:
-
我正在为您的代码制定解决方案:您需要将您的函数包含在 Ajax 函数中,并且仅在单击该按钮时触发它。为此,您需要在 Woocommerce 的管理页面中插入一些 js 代码。
标签: php json wordpress woocommerce thickbox