Woocommerce 自定义产品别名
Woocommerce custom Product slug
有没有一种方法可以根据产品属性创建自定义产品 URL,我有一款产品太阳镜,它有几个相关的属性:金属、蓝色和圆形,所以当前 URL 是:
website.com/glasses/sunglasses/abram-widana-629/
我想要得到的是 URL,其中包含以下属性:
website.com/glasses/sunglasses/abram-widana-meta-blue-round-629/
如果有人能指出正确的方向来解决这个问题,我将不胜感激。
有两种方法可以做到这一点,手动或编程。
手动调整永久链接:
在您的示例中,您只是调整产品 URL 以包含属性。这可以通过编辑产品本身的永久链接来手动实现。
产品 added/saved 后,您会看到永久链接直接显示在标题字段下方,如下所示:
只需单击它旁边的 编辑 按钮并将其从 abram-widana-629
更改为 abram-widana-meta-blue-round-629
以编程方式向永久链接添加属性:
如果您想尝试为所有产品永久实现此目的,您必须通过 "save_post" filter/hook 将所有属性添加到永久链接。唯一的缺点是您将无法再为您的产品调整您的个人永久链接,因为一旦您点击保存它们就会恢复原状。
下面是如何实现的代码示例:
add_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
function add_custom_attributes_to_permalink( $post_id, $post, $update ) {
//make sure we are only working with Products
if ($post->post_type != 'product' || $post->post_status == 'auto-draft') {
return;
}
//get the product
$_product = wc_get_product($post_id);
//get the "clean" permalink based on the post title
$clean_permalink = sanitize_title( $post->post_title, $post_id );
//next we get all of the attribute slugs, and separate them with a "-"
$attribute_slugs = array(); //we will be added all the attribute slugs to this array
foreach ($_product->get_attributes(); as $attribute_slug => $attribute_value) {
$attribute_slugs[] = $attribute_value;
}
$attribute_suffix = implode('-', $attribute_slugs);
//then add the attributes to the clean permalink
$full_permalink = $clean_permalink.$attribute_suffix;
// unhook the save post action to avoid a broken loop
remove_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
// update the post_name (which becomes the permalink)
wp_update_post( array(
'ID' => $post_id,
'post_name' => $full_permalink
));
// re-hook the save_post action
add_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
}
有没有一种方法可以根据产品属性创建自定义产品 URL,我有一款产品太阳镜,它有几个相关的属性:金属、蓝色和圆形,所以当前 URL 是:
website.com/glasses/sunglasses/abram-widana-629/
我想要得到的是 URL,其中包含以下属性:
website.com/glasses/sunglasses/abram-widana-meta-blue-round-629/
如果有人能指出正确的方向来解决这个问题,我将不胜感激。
有两种方法可以做到这一点,手动或编程。
手动调整永久链接:
在您的示例中,您只是调整产品 URL 以包含属性。这可以通过编辑产品本身的永久链接来手动实现。
产品 added/saved 后,您会看到永久链接直接显示在标题字段下方,如下所示:
只需单击它旁边的 编辑 按钮并将其从 abram-widana-629
更改为 abram-widana-meta-blue-round-629
以编程方式向永久链接添加属性:
如果您想尝试为所有产品永久实现此目的,您必须通过 "save_post" filter/hook 将所有属性添加到永久链接。唯一的缺点是您将无法再为您的产品调整您的个人永久链接,因为一旦您点击保存它们就会恢复原状。
下面是如何实现的代码示例:
add_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
function add_custom_attributes_to_permalink( $post_id, $post, $update ) {
//make sure we are only working with Products
if ($post->post_type != 'product' || $post->post_status == 'auto-draft') {
return;
}
//get the product
$_product = wc_get_product($post_id);
//get the "clean" permalink based on the post title
$clean_permalink = sanitize_title( $post->post_title, $post_id );
//next we get all of the attribute slugs, and separate them with a "-"
$attribute_slugs = array(); //we will be added all the attribute slugs to this array
foreach ($_product->get_attributes(); as $attribute_slug => $attribute_value) {
$attribute_slugs[] = $attribute_value;
}
$attribute_suffix = implode('-', $attribute_slugs);
//then add the attributes to the clean permalink
$full_permalink = $clean_permalink.$attribute_suffix;
// unhook the save post action to avoid a broken loop
remove_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
// update the post_name (which becomes the permalink)
wp_update_post( array(
'ID' => $post_id,
'post_name' => $full_permalink
));
// re-hook the save_post action
add_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
}