Кто-нибудь знает, как перенаправить клиентов на определенный URL, если они покупают конкретный продукт?
Идентификатор продукта: 24251, и я попытался заставить его работать с помощью следующего кода (но это не так)

URL страницы оформления заказа: theladybox.dk/checkout-page

URL страницы благодарности сейчас (для всех продуктов: theladybox.dk/tak-for-dit-medlemskab)

Кто-нибудь знает, где ошибка?

add_action( 'template_redirect', 'wc_custom_redirect_after_purchase' );
function wc_custom_redirect_after_purchase() {
    if ( ! is_wc_endpoint_url( 'checkout-page' ) ) return;


    // Define the product IDs in this array
    $product_ids = array( 24251 ); // or an empty array if not used
    // Define the product categories (can be IDs, slugs or names)
    $product_categories = array(24251); // or an empty array if not used
    $redirection = false;

    global $wp;
    $order_id =  intval( str_replace( 'checkout-page', '', $wp->request ) ); // Order ID
    $order = wc_get_order( $order_id ); // Get an instance of the WC_Order Object

    // Iterating through order items and finding targeted products
    foreach( $order->get_items() as $item ){
        if( in_array( $item->get_product_id(), $product_ids ) || has_term( $product_categories, 'product_cat', $item->get_product_id() ) ) {
            $redirection = true;
            break;
        }
    }


 $url = 'https://mailchi.mp/theladybox/din-ladybox-profil';

    // Make the custom redirection when a targeted product has been found in the order
    if( $redirection ){
        wp_redirect($url);
        exit;
    }
}

0
Christina 21 Ноя 2019 в 19:48

1 ответ

Я бы попробовал , чтобы изменить перенаправление. Вы по-прежнему можете использовать код, который у вас есть, для определения того, является ли продукт частью заказа, но я бы, вероятно, предложил сохранить мета-поле в самом заказе при оформлении заказа, так как тогда это будет легче проверить здесь.

/**
 * Redirect after order paid.
 *
 * @param string $result - The redirect URL
 * @param int $order_id
 *
 * @return string
 */
function kia_check_for_mnm_edit( $result, $order_id ) {

    // Define the product IDs in this array
    $product_ids = array( 24251 ); // or an empty array if not used

    // Define the product categories (can be IDs, slugs or names)
    $product_categories = array(24251); // or an empty array if not used

    // Get an instance of the WC_Order Object.
    $order = wc_get_order( $order_id );

    // Iterating through order items and finding targeted products
    foreach( $order->get_items() as $item ){
        if( in_array( $item->get_product_id(), $product_ids ) || has_term( $product_categories, 'product_cat', $item->get_product_id() ) ) {
            $result = 'https://mailchi.mp/theladybox/din-ladybox-profil';
            break;
        }
    }

    return $result;


}
add_filter( 'woocommerce_payment_successful_result', 'kia_redirect_successful_order', 10, 2 );

* Полностью не проверено

0
helgatheviking 22 Ноя 2019 в 00:02
Большое спасибо за ответ! Я попробовал использовать код и сделать тестовую покупку. Однако, когда я пытаюсь приобрести товар 24251 сейчас, он зависает на странице оформления заказа и вообще не перенаправляет :( Вы знаете, что пошло не так? Br Christina
 – 
Christina
22 Ноя 2019 в 12:35
Что-нибудь в WooCommerce> Статус> Журналы? Или в WP_DEBUG_LOG? Похоже на фатальную ошибку ... что весьма вероятно, когда я программирую наездницей.
 – 
helgatheviking
22 Ноя 2019 в 23:35