在我的wordpress网站上,我得到了以下错误
Fatal error: Call to a member function get_id() on boolean in /home/customer/www/ae.testing.com/public_html/wp-content/themes/movedo-child/functions.php on line 33
以前工作不错。但现在我还没有得到确切的问题。如果有人有想法,请告诉我
function.php如下:
<?php
function movedo_child_theme_setup() {
}
add_action( 'after_setup_theme', 'movedo_child_theme_setup' );
function display_price_in_variation_option_name( $term ) {
echo $product = wc_get_product();
$id = $product->get_id();
if ( empty( $term ) || empty( $id ) ) {
return $term;
}
if ( $product->is_type( 'variable' ) ) {
$product_variations = $product->get_available_variations();
} else {
return $term;
}
foreach($product_variations as $variation){
if(count($variation['attributes']) > 1){
return $term;
}
foreach($variation['attributes'] as $key => $slug){
if("attribute_" == mb_substr( $key, 0, 10 )){
$taxonomy = mb_substr( $key, 10 ) ;
$attribute = get_term_by('slug', $slug, $taxonomy);
if($attribute->name == $term){
$term .= " (" . wp_kses( wc_price($variation['display_price']), array()) . ")";
}
}
}
}
return $term;
}
add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );
在线">$id=$product->get_id((";我得到了这个错误。
问题似乎很简单,您正在挂钩到"after_setup_theme",它会为每个wordpress请求触发。在这种情况下,您假设在主查询上下文中总是有一个产品,但这并不总是正确的。
要简单地关闭错误包装$id=$product->get_id((;转换成这样的if:
if(!empty($product)){
$id = $product->get_id();
}
...
但要想真正做到无懈可击,你应该问问自己,什么时候你真的想研究wc_get_product来获得当前的产品。我想你可能只想在产品详细信息页面上看到。由于您正在挂接"after_setup_theme",因此可以使用条件标记。
更改你的代码,一旦它没有在正确的页面中执行,就立即退出,这样做:
function display_price_in_variation_option_name( $term ) {
if (!is_product()){
return;
}
echo $product = wc_get_product();
$id = $product->get_id();
...
global $product; //