WooCommerce自定义短代码:避免与Elementor编辑器的问题。

huangapple go评论67阅读模式
英文:

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 a WC_Product Object using is_a() PHP function,
  • Then also check that the get_sku() method exist for the WC_Product object using method_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 WooCommerce自定义短代码:避免与Elementor编辑器的问题。

function display_woo_sku() { 
	if ( ! is_product() ) {
		return 'no SKU';
	}
	global $product; 
	return $product->get_sku(); 
	} 
add_shortcode( 'woo_sku', 'display_woo_sku' );

huangapple
  • 本文由 发表于 2023年6月5日 18:28:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/76405526.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定