无法从 wc_display_item_meta (wordpress) 中删除自动生成的 p 标签
Can't remove auto generated p tag from wc_display_item_meta (wordpress)
问题:
以下php代码发送邮件,邮件结果显示如下结果。
请告诉我如何删除 < p > >
或将 p 替换为 span 好吗?
为什么我需要删除它:
我尝试了下面的css,
但内联/内联块仅适用于 Gmail,不适用于 Outlook
现有 php 代码(已创建插件 - quote-table.php):
<div class="subtitle">
<?php
if ( $im ) {
$im->display();
} else {
wc_display_item_meta( $item );
}
?>
</div>
邮件显示:
<div>
<ul style="font-size:small;margin:0;padding:0;list-style:none">
<li style="margin:0;padding:0">
<strong>Type:</strong>
<p style="margin:0;display:inline-block;color:#8d8d8d;">Blog</p>
</li>
</ul>
</div>
CSS 我试过了(把它加到引用中-table.php):
.subtitle p {
display: inline-block;
}
谢谢你。
wc_display_item_meta
位于 woocommerce 插件的 includes
文件夹中的 wc-template-functions.php
文件中,将采用两个参数。 $item
和 $args
。在 $args
中,您可以传递一个选项来禁用自动生成的 <p>
标签,也称为“autop”。
$args = array(
'autop' => false
):
if ( $im ) {
$im->display();
} else {
wc_display_item_meta( $item, $args );
}
此外,如果您需要进一步微调 $args
,这里是数组:
$args = array(
'before' => '<ul class="wc-item-meta"><li>',
'after' => '</li></ul>',
'separator' => '</li><li>',
'echo' => true,
'autop' => false,
'label_before' => '<strong class="wc-item-meta-label">',
'label_after' => ':</strong> ',
)
另一种方式
仍然无法正常工作?然后尝试以下函数,它将删除为您的值生成的所有标签:(代码转到您的 functions.php
文件)
add_filter('woocommerce_display_item_meta', 'your_theme_custom_woocommerce_display_item_meta', 20, 3);
function your_theme_custom_woocommerce_display_item_meta($html, $item, $args)
{
$strings = array();
$html = '';
foreach ($item->get_formatted_meta_data() as $meta_id => $meta) {
$display_value = wp_strip_all_tags($meta->display_value);
$value = trim($display_value);
$strings[] = '<strong class="wc-item-meta-label">' . wp_kses_post($meta->display_key) . ':</strong> ' . $value;
}
if ($strings) {
$html = $args['before'] . implode($args['separator'], $strings) . $args['after'];
}
if ($args['echo']) {
echo $html;
} else {
return $html;
}
}
然后在你的模板中使用这个:
if ( $im ) {
$im->display();
} else {
wc_display_item_meta( $item );
}
我为在过滤器挂钩上运行的自定义函数指定了 20
的优先级,这可能不起作用,因为您使用的插件可能使用更高优先级的函数。因此,如果这不起作用,请尝试将优先级从 20
更改为 999
以确保它在您的插件功能之后运行。
另一种方式
仍然无法正常工作?然后你可以使用 str_replace
函数来删除 p
标签,像这样:
$value = trim($display_value);
$value_text = str_replace(['<p>', '</p>'], ['', ''], $value);
问题:
以下php代码发送邮件,邮件结果显示如下结果。
请告诉我如何删除 < p > >
为什么我需要删除它:
我尝试了下面的css,
但内联/内联块仅适用于 Gmail,不适用于 Outlook
现有 php 代码(已创建插件 - quote-table.php):
<div class="subtitle">
<?php
if ( $im ) {
$im->display();
} else {
wc_display_item_meta( $item );
}
?>
</div>
邮件显示:
<div>
<ul style="font-size:small;margin:0;padding:0;list-style:none">
<li style="margin:0;padding:0">
<strong>Type:</strong>
<p style="margin:0;display:inline-block;color:#8d8d8d;">Blog</p>
</li>
</ul>
</div>
CSS 我试过了(把它加到引用中-table.php):
.subtitle p {
display: inline-block;
}
谢谢你。
wc_display_item_meta
位于 woocommerce 插件的 includes
文件夹中的 wc-template-functions.php
文件中,将采用两个参数。 $item
和 $args
。在 $args
中,您可以传递一个选项来禁用自动生成的 <p>
标签,也称为“autop”。
$args = array(
'autop' => false
):
if ( $im ) {
$im->display();
} else {
wc_display_item_meta( $item, $args );
}
此外,如果您需要进一步微调 $args
,这里是数组:
$args = array(
'before' => '<ul class="wc-item-meta"><li>',
'after' => '</li></ul>',
'separator' => '</li><li>',
'echo' => true,
'autop' => false,
'label_before' => '<strong class="wc-item-meta-label">',
'label_after' => ':</strong> ',
)
另一种方式
仍然无法正常工作?然后尝试以下函数,它将删除为您的值生成的所有标签:(代码转到您的 functions.php
文件)
add_filter('woocommerce_display_item_meta', 'your_theme_custom_woocommerce_display_item_meta', 20, 3);
function your_theme_custom_woocommerce_display_item_meta($html, $item, $args)
{
$strings = array();
$html = '';
foreach ($item->get_formatted_meta_data() as $meta_id => $meta) {
$display_value = wp_strip_all_tags($meta->display_value);
$value = trim($display_value);
$strings[] = '<strong class="wc-item-meta-label">' . wp_kses_post($meta->display_key) . ':</strong> ' . $value;
}
if ($strings) {
$html = $args['before'] . implode($args['separator'], $strings) . $args['after'];
}
if ($args['echo']) {
echo $html;
} else {
return $html;
}
}
然后在你的模板中使用这个:
if ( $im ) {
$im->display();
} else {
wc_display_item_meta( $item );
}
我为在过滤器挂钩上运行的自定义函数指定了 20
的优先级,这可能不起作用,因为您使用的插件可能使用更高优先级的函数。因此,如果这不起作用,请尝试将优先级从 20
更改为 999
以确保它在您的插件功能之后运行。
另一种方式
仍然无法正常工作?然后你可以使用 str_replace
函数来删除 p
标签,像这样:
$value = trim($display_value);
$value_text = str_replace(['<p>', '</p>'], ['', ''], $value);