簡體   English   中英

Woocommerce:將基於密鑰的類添加到“wc_display_item_meta”中的 LI

[英]Woocommerce: Add key based class to LI's in 'wc_display_item_meta'

我不是編碼員。 我盡我最大的努力去理解 PHP,多年來我已經能夠在這里和那里調整位,部分使用示例,只是通過反復試驗。 但現在我被困住了。

我想CSS類動態添加到李時珍在由功能“wc_display_item_meta”開始在文件中的行3206生成以下示例輸出/woocommerce/includes/wc-template-functions.php

<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 上的一些相關問題(例如,我可以添加 id 或 class 'wc_display_item_meta' )和網絡上的其他零碎部分,通過反復試驗,我想出了以下用於函數的代碼。 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 );

它工作得很好。 再次感謝老哥!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM