Go вперед и взгляните на документацию WordPress Shortcode . Шорткод, который у вас есть сейчас , неправильный. Шорткоды WordPress должны return
значение, а не echo
или иным образом не выводить его. Если вы видите операторы echo
в функции шорткода, обычно они включают Выходная буферизация и возвращают окончательное значение. (у вас также есть синтаксическая ошибка)
Ниже будет правильный способ реализации вашей текущей функции:
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() );
}
В качестве альтернативы, вы можете добавить их к той же функции и использовать атрибуты шорткода , чтобы определить, выводить ли весь 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>';
}
}