Woocommerce:将基于 class 的密钥添加到 'wc_display_item_meta' 中的 LI
Woocommerce: Add key based class to LI's in 'wc_display_item_meta'
我不是程序员。我尽我所能去理解 PHP 并且多年来我已经能够在这里和那里调整位,部分使用示例并且只是通过反复试验。但现在我被困住了。
我想将 CSS-classes 动态添加到以下由函数 "wc_display_item_meta" 从文件 /woocommerce/includes/wc-template-functions.php
的第 3206 行开始生成的示例输出中的 LI :
<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>
这些 classes 应该基于项目标签(键),这样上面的例子就会变成
<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>
基于 Whosebug 上的一些相关问题(例如 )和网络上的其他点点滴滴,通过反复试验,我想出了以下代码用于 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 都相同 class,这是基于最后一项的 label/key(在本例中为 "your-previous-function" . 在实际情况下我有大约 10 个 LI,他们都得到最后一项 label/key 的 class,而不是他们自己的
我怎样才能得到我想要的?我什至没有真正理解我拼凑的代码,所以我可能不会理解编码提示和说明。我很感激准备好使用代码。
我的编码向导朋友 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 );
效果很好。再次感谢伙计!
我不是程序员。我尽我所能去理解 PHP 并且多年来我已经能够在这里和那里调整位,部分使用示例并且只是通过反复试验。但现在我被困住了。
我想将 CSS-classes 动态添加到以下由函数 "wc_display_item_meta" 从文件 /woocommerce/includes/wc-template-functions.php
的第 3206 行开始生成的示例输出中的 LI :
<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>
这些 classes 应该基于项目标签(键),这样上面的例子就会变成
<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>
基于 Whosebug 上的一些相关问题(例如
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 都相同 class,这是基于最后一项的 label/key(在本例中为 "your-previous-function" . 在实际情况下我有大约 10 个 LI,他们都得到最后一项 label/key 的 class,而不是他们自己的
我怎样才能得到我想要的?我什至没有真正理解我拼凑的代码,所以我可能不会理解编码提示和说明。我很感激准备好使用代码。
我的编码向导朋友 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 );
效果很好。再次感谢伙计!