php - 如何以编程方式在 woocommerce 中随处更改产品名称?
问题描述
我正在尝试美化我的产品名称,我需要在任何地方应用更改(目录、购物车、结帐、小部件......)等
实际上,我设法:
目录(循环)单品:
add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
if('product' == get_post_type($id)){
$title = rename_woo_product($title, $id); // My function to rename
}
return $title;
}
在产品标题标签和 yoast 中:
add_filter( 'pre_get_document_title', 'generate_custom_title', 10 );
add_filter('wpseo_title', 'generate_custom_title', 15);
function generate_custom_title($title) {
if( is_singular( 'product') ) {
$title = get_the_title();
}
return $title;
}
购物车和结帐:
add_filter( 'woocommerce_cart_item_name', 'custom_variation_item_name', 10, 3 );
function custom_variation_item_name( $item_name, $cart_item, $cart_item_key ){
$product_item = $cart_item['data'];
$item_name = get_the_title( $cart_item['product_id'] );
if(!empty($product_item) && $product_item->is_type( 'variation' ) ) {
$item_name = $item_name . '<br>' . $cart_item['data']->attribute_summary;
}
if(is_cart()){
$item_name = sprintf( '<a href="%s">%s</a>', esc_url( $cart_item['data']->get_permalink() ), $item_name );
}
return $item_name;
}
我不知道这是否是最好的方法,但它适用于此。但是例如我使用 woocommerce 的最近查看的产品小部件,并且产品标题没有更新.. Yith Wishlist 也是如此
有没有更好的方法来更新产品名称并将其应用到任何地方?
解决方案
您也可以使用复合钩子woocommerce_product_get_name
,例如:
add_filter('woocommerce_product_get_name', 'filter_wc_product_get_name', 10, 2); // For "product" post type
add_filter('woocommerce_product_variation_get_name', 'filter_wc_product_get_name', 10, 2); // For "product_variation" post type
function filter_wc_product_get_name( $name, $product ){
if ( ! is_admin() ) {
$name = rename_woo_product($name, $product->get_id());
}
return $name;
}
它应该替换您在woocommerce_cart_item_name
过滤器挂钩中挂钩的自定义函数。
推荐阅读
- dialogflow-es - 如何在 Chatbot 在 Dialogflow 中开始对话之前收集用户信息,例如姓名和手机号码?
- java - 如何使用 Java NIO createDirectories 方法设置目录所有者组?
- networking - HyperLedger Fabric 网络设置
- r - 如何将此 dplyr 语句转换为 R 函数
- python - dynamodb 从列表中删除特定项目而不会发生冲突
- javascript - 如何访问 javascript/typescript 中的重复计数
- ios - iOS 12 致命异常:NSInternalInconsistencyException
- angularjs - 无法加载 ui-router 嵌套状态页面
- ios - 即使应用程序在前台运行,也会调用通知 - iOS12
- reactjs - 使用 redux 仅在 React 组件中获取部分存储/状态的最佳实践