【问题标题】:Woocommerce fatal error: Uncaught Error: Call to a member function get_type() on stringWoocommerce 致命错误:未捕获的错误:调用字符串上的成员函数 get_type()
【发布时间】:2021-12-14 22:54:42
【问题描述】:

我正在尝试构建一个插件,但当我认为它不应该存在时,我却被这个奇怪的致命错误所困扰。

add_action( 'wp_head', 'my_custom_plugin' );
function my_custom_plugin() {   
  global $product;
  if (is_product()) {
    $product_type = $product->get_type();
    if ($product_type =='variable') { 
        ...things happening here....
    }
  }
}

我的文件require_once ($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');中也包含此代码

谢谢你:)

【问题讨论】:

  • global $product; 下,你能不能print_r($product); 告诉我是否有任何数据返回?
  • test-a 致命错误:未捕获错误:调用成员函数get_type() test-a 是产品的slug
  • 仍然只有这个信息:test-a。然后是产品。所以它给出了产品但是当我在我的函数中调用它时是空的:/
  • 您是否认为它在代码中很早就触发了,因为它在wp_head 上运行?我很困惑

标签: php wordpress woocommerce plugins


【解决方案1】:

不确定到底发生了什么,但您可以试试这段代码,看看它是否适合您。它适用于我:

add_action( 'wp_head', 'my_custom_plugin' );

function my_custom_plugin() 
{   
  global $post;

  if (is_product()) {
    $product = wc_get_product($post->ID);
    $product_type = $product->get_type();
    if($product_type == 'variable'){ 
    // ...things happening here....
    }
  }
}

让我知道它是否有效!

【讨论】:

  • 是的,非常感谢您。 $product 无法加载是不是有点奇怪?
  • @GiannisMargetis 这是因为wp_head 钩子在每个前端页面上执行,包括$product 不可用的页面,例如博客页面。 is_product()在查看单个产品页面时返回true,所以如果你把global $product放在那个if条件之后它会起作用,因为$product将在单个产品页面上可用
  • 有趣!很高兴知道,感谢@7uc1f3r 的解释。
  • 谢谢@7uc1f3,我会尝试并分享结果。
猜你喜欢
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2022-01-20
  • 1970-01-01
  • 2023-03-15
  • 2022-12-21
相关资源
最近更新 更多