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

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

这是当前的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类中的简码或sku输出整个div。

php wordpress shortcode
1个回答
1
投票
[继续阅读WordPress Shortcode文档。您的

now短码不正确。 WordPress简码应该return一个值,而不是echo或以其他方式输出它。如果在短码函数中看到echo语句,通常它们已启用Output Buffering,然后返回最终值。 (您也有语法错误)

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

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

如果要输出HTML,只需将其包括在返回值中。如果您想要其他功能:

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() ); }

或者,您可以将它们添加到相同的函数中,并使用

shortcode属性

确定是输出整个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>'; } }

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