Вам не нужно переопределять какой-либо файл шаблона, просто используйте следующую подключенную функцию, чтобы заменить постоянную ссылку на вариацию продукта на постоянную ссылку на родительскую переменную продукта во всех заказах:
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 вашей активной дочерней темы (или активной темы).Проверено и работает.