Я не кодер. Я делаю все возможное, чтобы понять PHP, и за эти годы я смог настроить биты здесь и там, частично используя примеры и просто методом проб и ошибок. Но сейчас я застрял.
Я хочу динамически добавить CSS -классы в LI в следующем примере вывода, сгенерированного функцией "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 (например, можно ли добавить идентификатор или класс '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 получают один и тот же класс, который основан на метке / ключе последнего элемента (в данном случае "your-previous" -функция ". В реальной ситуации у меня около 10 LI, и все они получают класс метки / ключа последнего элемента вместо своего собственного.
Как я могу получить то, что хочу? даже не понимаю d код, который я собрал вместе, так что я, вероятно, не пойму подсказки и указания по кодированию. Буду признателен за готовый код.