英文:
WooCommerce Custom shortode : Avoid problems with Elementor editor
问题
我在我的主题的functions.php文件中使用下面的代码来在我的模板各个位置使用[woo_sku]
短代码输出产品SKU。虽然这个方法运行正常,但是如果不取消注释这个函数,我就无法访问模板编辑器(Elementor),因为在模板中没有产品上下文,错误会阻止编辑器加载。
是否有一种方法可以捕获这个错误,并在不在产品上下文中时返回一个空值?
function display_woo_sku() {
global $product;
return $product->get_sku();
}
add_shortcode( 'woo_sku', 'display_woo_sku' );
英文:
I’m using the code below in my theme's functions.php file to be able to output the Product SKU in various places all over my templates with [woo_sku]
shortcode. While this works fine, I can’t access the template editor (Elementor) without uncommenting the function, as there is no product context in the template and the error prevents the editor from loading.
Is there a way to catch the error and return an empty value when not in a product context?
function display_woo_sku() {
global $product;
return $product->get_sku();
}
add_shortcode( 'woo_sku', 'display_woo_sku' );
答案1
得分: 0
为了避免这个问题,你可以这样做:
- 首先使用
is_a()
PHP 函数检查$product
是否是WC_Product
对象, - 然后还要使用
method_exists()
PHP 函数检查WC_Product
对象是否存在get_sku()
方法。
你将在 IF
语句中同时使用它们,如下所示:
function display_woo_sku() {
global $product;
if( is_a( $product, 'WC_Product' ) && method_exists( $product, 'get_sku' ) ) {
return $product->get_sku();
} else {
return '';
}
}
add_shortcode( 'woo_sku', 'display_woo_sku' );
现在应该可以正常工作。
英文:
To avoid that problem, what you can do is:
- First check that
$product
is aWC_Product
Object usingis_a()
PHP function, - Then also check that the
get_sku()
method exist for theWC_Product
object usingmethod_exists()
PHP function.
You will use both of them in an IF
statement like:
function display_woo_sku() {
global $product;
if( is_a( $product, 'WC_Product' ) && method_exists( $product, 'get_sku' ) ) {
return $product->get_sku();
} else {
return '';
}
}
add_shortcode( 'woo_sku', 'display_woo_sku' );
It should better work now.
答案2
得分: 0
我现在尝试了下面的代码,似乎可以工作(尽管Loic上面的代码在我看来更有道理:)
function display_woo_sku() {
if ( ! is_product() ) {
return 'no SKU';
}
global $product;
return $product->get_sku();
}
add_shortcode( 'woo_sku', 'display_woo_sku' );
英文:
I tried the below code now, it appears to work (though Loic's code above seemed to make more sense, imho
function display_woo_sku() {
if ( ! is_product() ) {
return 'no SKU';
}
global $product;
return $product->get_sku();
}
add_shortcode( 'woo_sku', 'display_woo_sku' );
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论