Woocommerce简单过滤php

时间:2015-06-12 13:49:42

标签: php wordpress woocommerce

我的PHP技能非常低。我需要一些帮助这个功能。 它应该做什么:当订单被标记为“失败”时,它应该重定向到woocommerce购物车并显示错误消息。

但问题是此代码会将所有状态重定向到购物车并显示错误消息(即使付款已获批准)。

function distancecalcone(origin,destination) {

  var directions = Maps.newDirectionFinder()

    //Set the Method of Transporation. The available "modes" are WALKING,    DRIVING, BICYCLING, TRANSIT.
    .setMode(Maps.DirectionFinder.Mode.DRIVING)

    //Set the Orgin
    .setOrigin(origin)

    //Set the Destination
    .setDestination(destination)

    //Retrieve the Distance
    .getDirections();
    return directions.routes[0].legs[0].distance.value/1609.34;
}

2 个答案:

答案 0 :(得分:0)

目前,如果状态不是failed,然后重定向,那么您正在加油。

更改

if ( $order->status != 'failed' ) {

if ( $order->get_status() == 'failed' ) {

请参阅PHP comparison operators

此外,您没有得到正确的订单。您的函数应该$order_id并加载正确的顺序。

add_action( 'woocommerce_thankyou', function( $order_id ){
  $order = new WC_Order( $order_id );
  if ( $order->get_status() == 'failed' ) {
    wp_redirect( $woocommerce->cart->get_cart_url() );  // or whatever url you want
    wc_add_notice ( __( 'Payment Failed', 'woocommerce' ), 'error');
    exit;
  }
}, 10, 1); 

答案 1 :(得分:0)

首先,您需要使用挂钩“ woocommerce_order_status_failed”而不是“ woocommerce_thankyou”,因为它仅在订单状态失败时才会触发。 其次,您需要在函数new WC_Order()中传递订单ID,以便它将获取该订单的详细信息。然后可以使用if语句检查订单状态是否失败。您在if语句中使用了错误的运算符“!=”,因此它将进入购物车页面以显示除失败之一以外的所有状态。您应该使用“ ==”运算符,以便如果订单状态仅等于失败,则将处理该语句。用于获取网址的功能与新版本的woocommerce不兼容,但是可以使用get_permalink(wc_get_page_id('cart'))函数获​​取购物车页面的网址。

这里是一个例子:

add_action('woocommerce_order_status_failed','mysite_failed');

function mysite_failed($ order_id){

 $url = get_permalink( wc_get_page_id( 'cart' ) );
 $order = new WC_Order( $order_id );
 if ( $order->get_status() == 'failed' ) {
 wp_redirect($url);
 wp_redirect( $woocommerce->cart->wc_get_cart_url() ); // or whatever url you want
 wc_add_notice ( __( 'Payment Failed', 'woocommerce' ), 'error');

exit;

} }