Woocommerce:将基于键的类添加到'wc_display_item_meta'中的LI中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Woocommerce:将基于键的类添加到'wc_display_item_meta'中的LI中相关的知识,希望对你有一定的参考价值。

我不是编码员。我尽我所能来理解php,并且多年来,我一直可以在这里和那里进行微调,部分地使用示例,并通过反复试验来进行调整。但是现在我被困住了。

我想在以下示例输出中动态将CSS类添加到LI,该示例输出由函数“ wc_display_item_meta”从文件/woocommerce/includes/wc-template-functions.php的第3206行开始。

<ul class="wc-item-meta">
    <li>
        <strong class="wc-item-meta-label">Your Full Name</strong>
        <p>John Doe</p>
    </li>
    <li>
        <strong class="wc-item-meta-label">Your Previous Function</strong>
        <p>Carpenter</p>
    </li>
</ul>

这些类应基于项目标签(键),以便上面的示例成为

<ul class="wc-item-meta">
    <li class="your-full-name">
        <strong class="wc-item-meta-label">Your Full Name</strong>
        <p>John Doe</p>
    </li>
    <li class="your-previous-function">
        <strong class="wc-item-meta-label">Your Previous Function</strong>
        <p>Carpenter</p>
    </li>
</ul>

基于StackOverflow上的许多相关问题(例如can I add id or class 'wc_display_item_meta')和网络上的其他点点滴滴,并且通过反复试验,我想出了以下用于functions.php的代码:

function modified_woocommerce_display_item_meta( $html, $item, $args = array() ) 
$strings = array();
    $html = '';
    foreach ( $item->get_formatted_meta_data() as $meta_id => $meta ) 
        $display_value = wp_strip_all_tags( $meta->display_value );
        $display_key = $meta->display_key;
        $display_clean_key = sanitize_title_with_dashes( $meta->display_key );
        $value = $args['autop'] ? wp_kses_post( $display_value ) : wp_kses_post( make_clickable( trim( $display_value ) ) );
        $args['before'] = '<ul class="wc-item-meta"><li class="' . wp_strip_all_tags( $display_clean_key ) . '">';
        $args['separator'] = '</li><li class="' . wp_strip_all_tags( $display_clean_key ) . '">';
        $strings[] = $args['label_before'] . wp_kses_post( $display_key ) . $args['label_after'] . '<p>' . $value . '</p>';
    
    if ( $strings ) 
        $html = $args['before'] . implode( $args['separator'], $strings ) . $args['after'];
    
    return $html;

add_filter( 'woocommerce_display_item_meta', 'modified_woocommerce_display_item_meta', 10, 3 );

这导致输出类似

<ul class="wc-item-meta">
    <li class="your-previous-function">
        <strong class="wc-item-meta-label">Your Full Name</strong>
        <p>John Doe</p>
    </li>
    <li class="your-previous-function">
        <strong class="wc-item-meta-label">Your Previous Function</strong>
        <p>Carpenter</p>
    </li>
</ul>

因此,代码大部分都起作用,除了所有LI都具有相同的类,它基于最后一项的标签/键(在这种情况下为“您的先前功能”。在实际情况下,我有大约10个LI,它们都获得了最后一项的标签/键的类,而不是它们自己的。

我如何得到想要的东西?我什至根本不了解自己拼凑的代码,因此我可能不了解编码提示和指导。我希望随时可以使用代码。

答案

我的编码向导朋友M.介入并使用此代码解决了该问题:

function modified_woocommerce_display_item_meta( $html, $item, $args = array() ) 
$strings = array();
    $html = '';
    $class2li = '';
    $before = '<ul class="wc-item-meta">';
    $after = '</ul>';
    foreach ( $item->get_formatted_meta_data() as $meta_id => $meta ) 
        $display_value = wp_strip_all_tags( $meta->display_value );
        $display_key = $meta->display_key;     
        $display_clean_key = sanitize_title_with_dashes( $meta->display_key );
        $value = $args['autop'] ? wp_kses_post( $display_value ) : wp_kses_post( make_clickable( trim( $display_value ) ) );
        $class2li .=  '<li class="' . wp_strip_all_tags( $display_clean_key ) . '">' .
         '<strong class="wc-item-meta-label">' . $display_key . ': </strong>
         <p>' . $value . '</p></li>';
    
    $html = $before . $class2li . $after;
    return $html;

add_filter( 'woocommerce_display_item_meta', 'modified_woocommerce_display_item_meta', 10, 3 );

效果很好。再次感谢队友!

以上是关于Woocommerce:将基于键的类添加到'wc_display_item_meta'中的LI中的主要内容,如果未能解决你的问题,请参考以下文章

将基于送货方式的自定义文本添加到某些 WooCommerce 电子邮件通知

基于产品类型的 WooCommerce 的“添加到购物车”按钮旁边的自定义按钮

基于产品类型的 WooCommerce 的“添加到购物车”按钮旁边的自定义按钮

将运输方式和时间段添加到 woocommerce 电子邮件 [重复]

将带有值的产品属性添加到 Woocommerce 中的产品

插件:Woocommerce > 如何允许作者将产品添加到购物车