在 Woocommerce 单一产品页面中显示自定义分类

Posted

技术标签:

【中文标题】在 Woocommerce 单一产品页面中显示自定义分类【英文标题】:Display a custom taxonomy in Woocommerce single product pages 【发布时间】:2018-11-24 12:18:59 【问题描述】:

我使用以下代码向 Woocommerce 添加了一个名为“供应商”的新分类:

// hook into the init action and call taxonomy when it fires

add_action( 'init', 'create_vendor_taxonomy', 0 );

// create and register vendor taxonomy (hierarchical)

function create_vendor_taxonomy() 

    $labels = array(
        'name'              => _x( 'Vendors', 'taxonomy general name', 'textdomain' ),
        'singular_name'     => _x( 'Vendor', 'taxonomy singular name', 'textdomain' ),
        'search_items'      => __( 'Search Vendors', 'textdomain' ),
        'all_items'         => __( 'All Vendors', 'textdomain' ),
        'parent_item'       => __( 'Parent Vendor', 'textdomain' ),
        'parent_item_colon' => __( 'Parent Vendor:', 'textdomain' ),
        'edit_item'         => __( 'Edit Vendor', 'textdomain' ),
        'update_item'       => __( 'Update Vendor', 'textdomain' ),
        'add_new_item'      => __( 'Add New Vendor', 'textdomain' ),
        'new_item_name'     => __( 'New Vendor Name', 'textdomain' ),
        'menu_name'         => __( 'Vendors', 'textdomain' ),
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'vendor' ),
    );

    register_taxonomy( 'vendor', array( 'product' ), $args );


我想在单个产品页面上显示的类别和标签标签之间插入这个新分类。

我有一个子主题,并且了解我必须在子主题中创建一个 woocommerce 文件夹,然后将我必须编辑的 woo 模板文件的副本添加到该文件夹​​中。

谁能帮帮我?

    我必须编辑哪些 woo 模板文件? 我需要向这些文件中添加什么代码才能将我的新分类法插入到产品页面中?

提前感谢您的任何帮助。

更新: 经过进一步研究,我似乎不需要编辑 Woo 模板文件。

在单个产品页面的类别和标签元下方有一个可用的挂钩。这样就可以了。

所以我可以使用以下内容插入供应商分类详细信息:

add_action( 'woocommerce_product_meta_end', 'insert_vendor_custom_action', 5 );

function insert_vendor_custom_action() 
    global $product;
    if [WHAT DO I NEED HERE?]
    echo [WHAT DO I NEED HERE?];

感谢任何可以帮助我的人。

【问题讨论】:

【参考方案1】:

要在 Woocommerce 单一产品页面的元部分显示来自自定义分类术语的帖子术语,您无需覆盖任何 Woocommerce 模板。

相反,您可以通过这种方式使用特定的专用操作挂钩:

add_action( 'woocommerce_product_meta_end', 'action_product_meta_end' );
function action_product_meta_end() 
    global $product;

    $taxonomy = 'vendor'; // <== Here set your custom taxonomy

    if( ! taxonomy_exists( string $taxonomy ) ) 
        return; // exit
    
    $term_ids = wp_get_post_terms( $product->get_id(), $taxonomy, array('fields' => 'ids') );

    if ( ! empty($term_ids) ) 
        echo get_the_term_list( $product->get_id(), 'vendor', '<span class="posted_in">' . _n( 'Vendor:', 'Vendors:', count( $term_ids ), 'woocommerce' ) . ' ', ', ', '</span>' );
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

【讨论】:

洛伊克。非常感谢您的友好帮助。就像您发布答案一样,我似乎发布了我的更新。我假设我可以将 span 类“posted_in”更改为我选择的任何内容,然后使用该类来设置 Vendor: label with CSS 的样式? @khunmax 是的,您可以尝试根据需要更改 html 标记类,也可以向它们添加其他标记类,以设置它们的样式……此答案代码基于模板 single-product/meta.phpthis related functions source code也是。 嘿@LoicTheAztec 可以请帮我吗? wordpress.stackexchange.com/questions/317734/… @leonardeveloper 对不起,我不在 WP StackExchange 中回答,因为插件问题是题外话。我只在 *** 中回答一些选择的 Woocommerce 标记问题 我投票支持这个答案。但是,当没有分类记录存在时,我需要检查返回的空白数组变量。如果 (!is_wp_error($term_ids) && !empty($term_ids )) echo get_the_term_list(...) 谢谢!!

以上是关于在 Woocommerce 单一产品页面中显示自定义分类的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML 集成到 WordPress Woocommerce 单一产品页面中

仅在 WooCommerce 单一产品页面上加载脚本

在 Woocommerce 商店页面中仅显示特色产品

替换产品类别的 Woocommerce 单一产品页面上的“添加到购物车”按钮

单个产品页面上的 Woocommerce 钩子溢出

将Woocommerce单一产品页面上的添加到购物车按钮替换为产品类别