wordpress - 在通过 hook/php 加载 Woocommerce 感谢页面的内容后,有什么方法可以运行代码?
问题描述
我有一个函数可以获取超过 2000 多个 Mailchimp 联系人,所以运行这个查询和做其他一些事情需要将近 30 秒的时间,这个查询是在从结帐页面下订单后运行的。
但是我想做的是,一旦感谢页面完全加载,就需要运行 Mailchimp 联系人查询,否则现在加载感谢页面需要 30 秒的时间,这对用户不友好. 但是只有在加载感谢页面内容之后,我没有任何方法来运行该功能,而不是在它之前。
我目前正在使用这个钩子
woocommerce_thankyou
提前致谢!
解决方案
您可以使用woocommerce_thankyou
在内容加载后调用的操作挂钩。检查下面的代码。代码将转到活动主题 funcions.php 文件。
add_action( 'woocommerce_thankyou', 'run_mailchimp_query' );
function run_mailchimp_query( $order_id ) {
// your mailchimp code.
}
您还可以使用wp_footer
操作挂钩。
add_action( 'wp_footer', 'run_mailchimp_query' );
function run_mailchimp_query() {
// returm early if is not on the Thank you page.
if( !is_wc_endpoint_url( 'order-received' ) ) return;
// your mailchimp code.
}
此外,您可以使用AJAX
add_action( 'woocommerce_thankyou', 'run_mailchimp_query' );
function run_mailchimp_query( $order_id ) {
?>
<script type="text/javascript">
(function($){
$(document).ready(function(){
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type : 'post',
data: {
'action' : 'run_mailchimp_query'
'order_id': '<?php echo $order_id; ?>'
},
success: function( data) {
}
});
});
})(jQuery);
</script>
<?php
}
add_action("wp_ajax_run_mailchimp_query", "run_mailchimp_query");
add_action("wp_ajax_nopriv_run_mailchimp_query", "run_mailchimp_query");
function run_mailchimp_query(){
$order_id = $_POST['order_id'];
create_coupon_based_on_user_registration( $order_id );
wp_send_json_success();
}
您也可以使用 CRON 作业,然后获取所有订单。最好create_coupon_based_on_user_registration
在 cron 作业中运行。
function add_five_minute_cron_schedules($schedules){
if( !isset( $schedules["five_minute"] ) ){
$schedules["five_minute"] = array(
'interval' => 5*60,
'display' => __('Once every 5 minutes')
);
}
return $schedules;
}
add_filter('cron_schedules','add_five_minute_cron_schedules');
if( ! wp_next_scheduled( 'create_coupon_based_on_user_registration_cron' ) ){
wp_schedule_event( time(), 'five_minute', 'create_coupon_based_on_user_registration_cron' );
}
//Hook into that action that'll fire every 5 minutes.
add_action( 'create_coupon_based_on_user_registration_cron', 'create_coupon_based_on_user_registration_callback' );
function create_coupon_based_on_user_registration_callback(){
$args = array(
'post_status' => array( 'wc-processing' ),
'posts_per_page' => -1,
'meta_key' => 'coupon_created',
'meta_compare' => 'NOT EXISTS'
);
$orders = wc_get_orders($args);
if( !empty( $orders ) ){
// Loop through each $order objects.
foreach( $orders as $order ){
$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
create_coupon_based_on_user_registration( $order_id );
update_post_meta( $order_id, 'coupon_created', 1 );
}
}
}
推荐阅读
- python - Python import in Init
- sql - 合并两个临时表并将公共列添加为新行并使用 sql 添加不匹配列
- javascript - 使用数据表在 v-for 列表中添加或删除项目
- c# - 当我在 ASP.NET 中编辑(更新)帖子时,图像被重置
- sql - 多对多发布到标签查询
- python - pool.apply_async, pool.map 上相当复杂的函数
- javascript - 如何使用 JSON 数据嵌套 React 组件
- python - 如何在 python 中使用多处理和使用 SQL 插入语句的函数
- c# - 在 ASP.Net MVC 或 Core 中使用 Ajax 在视图中为 DataTable 分页添加额外的列
- excel - 使用拆分 VBA 的类型不匹配