将简码和 div 添加到 PHP 输出到新的简码

Add shortcode and div into PHP output to new shortcode

这是当前的 HTML 但我想创建一个简码来显示所有内容...

<div class="widget" sp-sku="sku-value-goes-here"></div> 

我设置了一个获取 SKU 的简码

function wc_get_product_sku() { 
    global $product;
    echo $product->get_sku();
add_shortcode('product_sku', 'wc_get_product_sku'); 

但我想要一个新的简码来输出整个 div 以及 div class. 中的简码或 sku

继续并启用 WordPress Shortcode documentation a glance. The shortcode you have now is improper. WordPress Shortcodes are supposed to return a value, not echo or otherwise output it. If you see echo statements in a shortcode function, generally they have Output Buffering,然后 return 最终值。 (你也有语法错误)

以下是实现当前功能的正确方法:

add_shortcode('product_sku', 'wc_get_product_sku'); 
function wc_get_product_sku() { 
    global $product;

    return $product->get_sku();
}

如果要输出 HTML,只需将其包含在 return 值中即可。如果你想要另一个功能:

add_shortcode( 'product_sku_div', 'wc_product_sku_div'); 
function wc_product_sku_div() { 
    global $product;

    return sprintf( '<div class="widget" sp-sku="%s"></div>', $product->get_sku() );
}

或者,您可以将它们添加到相同的函数并使用 短代码属性 来确定是输出整个 HTML 还是只输出 SKU,如下所示:

add_shortcode( 'wc_get_product_sku', 'wc_get_product_sku_function'); 
function wc_get_product_sku_function( $atts ) { 
    global $product;
    $sku = $product->get_sku();

    extract( shortcode_atts( array(
        'wrap' => false,
    ), $atts, 'wc_get_product_sku' ) );

    return ($wrap == true) ? sprintf( '<div class="widget" sp-sku="%s"></div>', $sku ) : $sku;
}

这希望您使用 [wc_get_product_sku][wc_get_product_sku wrap="false"] 来获取 sku,并使用 [wc_get_product_sku wrap="true"] 来获取整个 HTML。

编辑:要检查 sku,只需将 return 语句包装在 if/else:

add_shortcode( 'product_sku_div', 'wc_product_sku_div'); 
function wc_product_sku_div() { 
    global $product;

    if( $product && !empty( $product->get_sku() ) ){
        return sprintf( '<div class="widget" sp-sku="%s"></div>', $product->get_sku() );    
    } else {
        return '<div>NO SKU FOUND</div>';
    }
}