Woocommerce 定制产品 slug

Posted

技术标签:

【中文标题】Woocommerce 定制产品 slug【英文标题】:Woocommerce custom Product slug 【发布时间】:2019-12-04 12:50:20 【问题描述】:

有没有办法根据产品属性创建自定义产品 URL,我有一个产品太阳镜,它有几个属性与之相关:金属、蓝色和圆形,所以当前 URL 是:

website.com/glasses/sunglasses/abram-widana-629/

我想要得到的是一个包含这些属性的 URL:

website.com/glasses/sunglasses/abram-widana-meta-blue-round-629/

如果有人能指出如何解决这个问题的正确方向,我将不胜感激。

【问题讨论】:

这可能会有所帮助:docs.woocommerce.com/document/permalinks。 (我自己没试过)。也许您可以将“分类固定链接”部分与“产品属性库”一起使用 产品属性库似乎像一个类别一样工作,它显示所有包含选定属性的产品,但是当您点击实际产品时,属性不会留在产品本身的实际 URL 中:( 【参考方案1】:

有两种方法可以做到这一点,手动或编程。


手动调整永久链接:

在您的示例中,您只是调整产品 URL 以包含属性。这可以通过编辑产品本身的永久链接来手动实现。

添加/保存产品后,您将看到永久链接直接显示在标题字段下方,如下所示:

只需单击它旁边的 编辑 按钮,然后将其从 abram-widana-629 更改为 abram-widana-meta-blue-round-629


以编程方式向永久链接添加属性:

如果您想尝试为所有产品永久实现此目的,则必须通过“save_post”过滤器/挂钩将所有属性添加到永久链接。唯一的缺点是您将无法再为您的产品调整您的个人永久链接,因为一旦您点击保存,它们就会恢复原状。

下面是一个如何实现的代码示例:

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 );

【讨论】:

非常感谢先生,正是我正在寻找的方向:) 我试图将您的代码复制并粘贴到我的网站。但是,它说 Parsar 错误 @Jornes 这很奇怪,你不应该在这段代码中遇到解析器错误吗?并且代码肯定有效。我建议打开一个新问题,包括您正在使用的代码(上面的代码),它被粘贴到哪里以及确切的错误。随时在此处的 cmets 中添加指向您的新问题的链接,我会去寻找您:) 但它只是显示。不知道为什么!

以上是关于Woocommerce 定制产品 slug的主要内容,如果未能解决你的问题,请参考以下文章

php woocommerce定制产品类型

更新变体产品价格 - 在产品页面中不可见 - Woocommerce

在Woocommerce中为特定产品类别使用自定义单一产品模板

Woocommerce 添加到自定义产品的购物车按钮

php Cheatsheet - 在functions.php中的WooCommerce定制

php Cheatsheet - 在functions.php中的WooCommerce定制