无法从 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);