隐藏自定义短代码中具有空值的 WooCommerce 产品属性

问题描述 投票:0回答:1

我使用下面的代码通过短代码在自定义选项卡中显示一定数量的属性。这工作正常,但并非所有产品都具有相同的规格。如何隐藏不包含数据的行?

我输入了此代码:

// Display grouped attributes Gewicht en Omvang
function get_product_attributes_gewicht_shortcode( $atts ) {
extract( shortcode_atts( array(
    'id'    => get_the_ID(),
), $atts, 'display-attributes-gewicht' ) );

global $product;

if ( ! is_a($product, 'WC_Product') ) {
    $product = wc_get_product( $id );
}
if ( is_a($product, 'WC_Product') ) {
    $gewicht = $product->get_attribute( 'Gewicht (gram)' );
    $hoogte = $product->get_attribute( 'Hoogte (mm)');
    $lengte = $product->get_attribute( 'Lengte (mm)');
    $breedte = $product->get_attribute( 'Breedte (mm)');
    return '<div class="divTableAtt LichtBlauweRegels">' .
                '<div class="divTableAttBody">' .
                    '<div class="divTableAttRow">' .
                        '<div class="divTableAttCell">Gewicht (gram)</div>' .
                        '<div class="divTableAttCell">' . $gewicht . '</div>' .
                    '</div>' .
                    '<div class="divTableAttRow">' .
                        '<div class="divTableAttCell">Hoogte (mm)</div>' .
                        '<div class="divTableAttCell">' . $hoogte . '</div>' .
                    '</div>' .
                    '<div class="divTableAttRow">' .
                        '<div class="divTableAttCell">Lengte (mm)</div>' .
                        '<div class="divTableAttCell">' . $lengte . '</div>' .
                    '</div>' .
                    '<div class="divTableAttRow">' .
                        '<div class="divTableAttCell">Breedte (mm)</div>' .
                        '<div class="divTableAttCell">' . $breedte . '</div>' .
                    '</div>' .
                '</div>' .
            '</div>';
}
}
add_shortcode( 'display-attributes-gewicht', 'get_product_attributes_gewicht_shortcode' );`

如果该行的 attrube 为空,我想隐藏 。 我尝试在该行周围使用 and if 语句,但它不起作用。

if (isset($breedte)){
return '<div class="divTableAttRow">' .
'<div class="divTableAttCell">Breedte (mm)</div>' .
'<div class="divTableAttCell">' . $breedte . '</div>' .
'</div>';
}

我之前确实用 ; 关闭了该行 并以新的“return”语句开始该行。

结果是显示了其他函数的整个结果,而不仅仅是这组函数的预期结果。

我仍在学习这一点并弄清楚如何让它发挥作用。

php wordpress woocommerce shortcode taxonomy-terms
1个回答
0
投票

尝试以下修改后的短代码,该代码将仅显示定义的产品属性:

// Display grouped attributes Gewicht en Omvang
add_shortcode( 'display-product-attributes', 'shortcode_display_product_attributes' );
function shortcode_display_product_attributes( $atts ) {
    extract( shortcode_atts( array(
        'id'    => get_the_ID(),
    ), $atts, 'display-product-attributes' ) );

    global $product;

    if ( ! is_a($product, 'WC_Product') ) {
        $product = wc_get_product( $id );
    }

    if ( is_a($product, 'WC_Product') ) {
        $gewicht = $product->get_attribute('Gewicht (gram)');
        $hoogte  = $product->get_attribute('Hoogte (mm)');
        $lengte  = $product->get_attribute('Lengte (mm)');
        $breedte = $product->get_attribute('Breedte (mm)');

        if ( $gewicht || $hoogte || $lengte || $breedte ) {
            $output = '<div class="divTableAtt LichtBlauweRegels">
            <div class="divTableAttBody">';

            if ( $gewicht ) {
                $output .= '<div class="divTableAttRow">
                <div class="divTableAttCell">Gewicht (gram)</div>
                <div class="divTableAttCell">' . $gewicht . '</div>
                </div>';
            }

            if ( $hoogte ) {
                $output .= '<div class="divTableAttRow">
                <div class="divTableAttCell">Hoogte (mm)</div>
                <div class="divTableAttCell">' . $hoogte . '</div>
                </div>';
            }

            if ( $lengte ) {
                $output .= '<div class="divTableAttRow">
                <div class="divTableAttCell">Lengte (mm)</div>
                <div class="divTableAttCell">' . $lengte . '</div>
                </div>';
            }

            if ( $breedte ) {
                $output .= '<div class="divTableAttRow">
                <div class="divTableAttCell">Breedte (mm)</div>
                <div class="divTableAttCell">' . $breedte . '</div>
                </div>';
            }

            return $output . '</div></div>';
        }
    }
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.