在通过 hook/php 加载 Woocommerce 感谢页面的内容后,有什么方法可以 运行 代码吗?
Is there any way to run a code after the content loaded of Woocommerce thank you page via hook/php?
我有一个函数可以获取超过 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 作业,然后获取所有订单。在 cron 作业中 运行 create_coupon_based_on_user_registration
更好。
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 );
}
}
}
我有一个函数可以获取超过 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 作业,然后获取所有订单。在 cron 作业中 运行 create_coupon_based_on_user_registration
更好。
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 );
}
}
}