php - 过多的 DOM 元素货币符号

标签 php wordpress dom woocommerce pagespeed

当我运行 pagespeed insight 时,这个 <span class="woocommerce-Price-currencySymbol">导致 Dom 元素过多。我尝试了以下方法但无济于事。许多人遇到过这些问题,但没有人有解决方案。


add_filter('woocommerce_currency_symbol', 'change_existing_currency_symbol', 10, 2);

function change_existing_currency_symbol( $currency_symbol, $currency ) {
     switch( $currency ) {
          case 'AUD': $currency_symbol = 'AUD'; break;
     }
     return $currency_symbol;
}


include_once __DIR__ . '/theme-includes/theme-functions.php';

还有这个

add_filter( 'formatted_woocommerce_price', 'span_custom_prc', 10, 5 );

function span_custom_prc( $number_format, $price, $decimals, $decimal_separator, $thousand_separator)
{
    return "<span class='woocommerce-Price-amount amount'>".$number_format."&nbsp;</span>";
}

最佳答案

在您的事件主题 functions.php 中使用以下代码片段。

使用 WooCommerce 6 测试正常

add_filter('wc_price', 'custom_wc_price', 10, 5);

/**
 * Filters the string of price markup.
 *
 * @param string       $return            Price HTML markup.
 * @param string       $price             Formatted price.
 * @param array        $args              Pass on the args.
 * @param float        $unformatted_price Price as float to allow plugins custom formatting. Since 3.2.0.
 * @param float|string $original_price    Original price as float, or empty string. Since 5.0.0.
 */
function custom_wc_price($return, $price, $args, $unformatted_price, $original_price) {
    $args = apply_filters(
            'wc_price_args',
            wp_parse_args(
                    $args,
                    array(
                        'ex_tax_label' => false,
                        'currency' => '',
                        'decimal_separator' => wc_get_price_decimal_separator(),
                        'thousand_separator' => wc_get_price_thousand_separator(),
                        'decimals' => wc_get_price_decimals(),
                        'price_format' => get_woocommerce_price_format(),
                    )
            )
    );

    $original_price = $price;

    // Convert to float to avoid issues on PHP 8.
    $price = (float) $price;

    $unformatted_price = $price;
    $negative = $price < 0;

    /**
     * Filter raw price.
     *
     * @param float        $raw_price      Raw price.
     * @param float|string $original_price Original price as float, or empty string. Since 5.0.0.
     */
    $price = $negative ? $price * -1 : $price;

    /**
     * Filter formatted price.
     *
     * @param float        $formatted_price    Formatted price.
     * @param float        $price              Unformatted price.
     * @param int          $decimals           Number of decimals.
     * @param string       $decimal_separator  Decimal separator.
     * @param string       $thousand_separator Thousand separator.
     * @param float|string $original_price     Original price as float, or empty string. Since 5.0.0.
     */
    $price = number_format($price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator']);

    if (apply_filters('woocommerce_price_trim_zeros', false) && $args['decimals'] > 0) {
        $price = wc_trim_zeros($price);
    }

    $formatted_price = ( $negative ? '-' : '' ) . sprintf($args['price_format'],  get_woocommerce_currency_symbol($args['currency']), $price);
    $return = '<span class="woocommerce-Price-amount amount"><bdi>' . $formatted_price . '</bdi></span>';

    if ($args['ex_tax_label'] && wc_tax_enabled()) {
        $return .= ' <small class="woocommerce-Price-taxLabel tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>';
    }


    return $return;
}

关于php - 过多的 DOM 元素货币符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71186014/

相关文章:

javascript - jquery 发布表单不起作用

php - 数据未通过 PHP 完全从 MySQL 导出到 CSV

javascript - 单击侧边栏中的js后如何保持导航菜单突出显示

wordpress - 在 Wordpress 中定位移动菜单

Java 需要帮助来关闭 Stream

php - 列计数与第 1 行的值计数不匹配是我收到的错误

php - 删除重复的mysql条目

php - 高级自定义字段类别链接

cocoa - 如何将 HTML 元素添加到 Cocoa Webview

javascript - 如何用DOM检索style.top,还有其他方法吗?