Мне нужно сделать так, чтобы когда люди нажимали «Разместить заказ» в нашем интернет-магазине, они получали перенаправление на «Мой аккаунт», но только если категории XXX , XXX , XXX
Но я не могу заставить его работать, к сожалению
Я пытался использовать && is_product_category('Category x','Category x','Category x')
// REDIRECT AFTER PLACE ORDER BUTTON!
add_action( 'woocommerce_thankyou', 'KSVS_redirect_custom');
function KSVS_redirect_custom( $order_id ){
$order = new WC_Order( $order_id );
$url = 'https://kanselvvilselv.dk/min-konto/';
if ( $order->status != 'failed' ) {
wp_redirect($url);
exit;
}
}
Работает без проставления && is_product_category('Category x','Category x','Category x')
, Но зато работает по категориям, где не должно работать.
Обновлено, это должно перебирать все заказанные продукты, и если он соответствует 1 продукту с категорией, он будет перенаправлен на ваш URL-адрес:
add_action( 'woocommerce_thankyou', 'KSVS_redirectcustom');
function KSVS_redirectcustom( $order_id ){
$order = wc_get_order( $order_id );
$url = get_permalink( get_option('woocommerce_myaccount_page_id') );
if ( $order->status != 'failed' ) {
$product_cats = array('product-cat1', 'product-cat', 'product-cat3');
foreach ($order->get_items() as $item) {
if ( has_term( $product_cats, 'product_cat', $product->id) ) {
$cat_check = true;
break;
}
}
if ( $cat_check ) {
wp_redirect($url);
exit;
}
}
}
Нет, это после окончательной проверки, когда они нажимают «Оформить заказ» - тогда их нужно перенаправить на страницу моей учетной записи, но это только для некоторых категорий :)
О да, неудивительно, что is_product_category() проверяет, является ли страница в настоящее время категорией продукта, вам нужно будет просмотреть все купленные товары, чтобы проверить, находятся ли они в одной из категорий, если да, то перенаправить. Если ответы других парней не исправят, я попробую
Примечание: я совсем не знаком с woocommerce, пожалуйста, примите мой ответ с легкостью.
Похоже, что функция is_product_category
имеет другое назначение, по краткому обзору я пришел с этим, попробуйте:
$redirectWhenCategoryIs = ['cat x', 'cat y', 'cat z'];
$categories = [];
foreach($order->get_items() as $item) {
foreach(get_the_terms($item['product_id'], 'product_cat') as $term){
$categories[] = $term->slug;
}
}
if (count(array_intersect($redirectWhenCategoryIs, $categories))){
wp_redirect($url);
}
Следующий код, использующий специальный хук template_redirect
и условную функцию WordPress has_term()
(для использования с категориями товаров), будет перенаправлять клиентов после оформления заказа в раздел моей учетной записи, когда их заказ содержит товары из определенных категорий продуктов:
add_action( 'template_redirect', 'order_received_redirection_to_my_account' );
function order_received_redirection_to_my_account() {
// Only on "Order received" page
if ( is_wc_endpoint_url('order-received') ) {
global $wp;
// HERE below define your product categories in the array
$categories = array('Tshirts', 'Hoodies', 'Glasses');
$order = wc_get_order( absint($wp->query_vars['order-received']) ); // Get the Order Object
$category_found = false;
// Loop theough order items
foreach( $order->get_items() as $item ){
if ( has_term( $categories, 'product_cat', $item->get_product_id() ) ) {
$category_found = true;
break;
}
}
if ( $category_found ) {
// My account redirection url
$my_account_redirect_url = get_permalink( get_option('woocommerce_myaccount_page_id') );
wp_redirect( $my_account_redirect_url );
exit(); // Always exit
}
}
}
Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
попробуйте использовать is_product_category() в единственном числе без || для дополнительных 2 и посмотрите, работает ли это. Они заказывают со страницы категории, верно? Не страница оформления заказа?