Установить постоянную ссылку позиции заказа из родительской переменной product в WooCommerce - PullRequest
1 голос
/ 19 сентября 2019

На странице благодарности и в электронных письмах с заказами постоянная ссылка для переменных продуктов всегда связана непосредственно с вариантом продукта, а не с самим родительским продуктом, например, https://mystore.com/some-product/?attribute_color=red. Мне нужна постоянная ссылка для отражения продукта, а невариант, например https://mystore.com/some-product/.

Я пробовал следующее:

$parent_id = $product->get_parent_id();
$slug = $product->get_permalink($parent_id);

Переменная

$parent_id

возвращается правильно, но

$slug

всегда постоянная ссылка на вариант.Что мне не хватает?В качестве альтернативы я попытался получить имя сообщения родителя, например,

$parent_id = $product->get_parent_id();
$slug = $product->get_post_name($parent_id);

, но это выдает ошибку, и страница с благодарностью рендерится только частично.

1 Ответ

1 голос
/ 20 сентября 2019

Вам не нужно переопределять какой-либо файл шаблона, просто используйте следующую подключенную функцию, чтобы заменить постоянную ссылку на вариацию продукта на постоянную ссылку на родительскую переменную продукта во всех заказах:

add_filter( 'woocommerce_order_item_permalink', 'filter_order_item_permalink_callback', 10, 3 );
function filter_order_item_permalink_callback( $product_permalink, $item, $order ) {

    // For product variations
    if( $item->get_variation_id() > 0 ){
        $product    = $item->get_product();
        $is_visible = $product && $product->is_visible();

        // Get the instance of the parent variable product Object
        $parent_product = wc_get_product( $item->get_product_id() );

        // Return the parent product permalink (if product is visible)
        return $is_visible ? $parent_product->get_permalink() : '';
    }
    return $product_permalink;
}

Код входит вfunctions.php файл вашей активной дочерней темы (или активной темы).Протестировано и работает.


Для уведомлений по электронной почте

WooCommerce по умолчанию не отображает постоянную ссылку продукта в уведомлениях по электронной почте…

Чтобы отобразить постоянную ссылку на продукт в уведомлениях по электронной почте, используйте следующее:

add_filter( 'woocommerce_order_item_name', 'filter_order_item_name_callback', 10, 3 );
function filter_order_item_name_callback( $item_name, $item, $is_visible ) {

    // On emails notifications only
    if( ! is_wc_endpoint_url() > 0 ) {
        $product = $item->get_product();

        // For product variation type
        if( $item->get_variation_id() > 0 ){

            // Get the instance of the parent variable product Object
            $parent_product = wc_get_product( $item->get_product_id() );

            // The parent product permalink (if product is visible)
            $product_permalink = $parent_product->get_permalink();
        } 
        // For other item (product) type
        else {
            $product_permalink = $product->get_permalink();
        }

        return sprintf( '<a href="%s">%s</a>', $product_permalink, $item_name );
    }
    return $item_name;
}

Код входит в файл functions.php вашей активной дочерней темы (или активной темы).Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...