php - 从 WooCommerce 中的父变量产品设置订单项目永久链接
问题描述
在感谢页面和订单电子邮件中,可变产品的永久链接始终直接链接到产品变体而不是父产品本身,例如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);
但这会引发错误,并且感谢页面仅部分呈现。
解决方案
您不需要覆盖任何模板文件,只需使用以下挂钩函数,将产品变体永久链接替换为所有订单上的父变量产品永久链接:
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 不会在电子邮件通知中显示产品永久链接……</p>
要在电子邮件通知中显示产品永久链接,请使用以下命令:
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 文件中。测试和工作。
推荐阅读
- java - org.json.JSONException: No value for senses
- python - How to divide a text file sectionwise using Python
- .net - Microsoft.AspNetCore.Mvc.Analyzers.TopLevelParameterNameAnalyzer 引发了“System.NullReferenceException”类型的异常
- android - Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference issue
- java - Can some one get jar from a docker image and reverse engineer the jar to get the source code?
- javascript - How can I implement authentication with next-iron-session using getServerSideProps without including the same code on each page
- python - Replace all Non-Alphanumeric Characters except one particular pattern using RegEx in Python
- powerbi - 根据一个月计算工作日数
- postgresql - Kubernetes postgresql statefullset problem
- angular - Display Client Errors and then Server Errors on Angular's Reactive Form after submission