行文件123是下面這段代碼中:在最後一行
function wc_nav_menu_items($items) {
if (! is_user_logged_in()) {
$customer_logout = get_option('woocommerce_logout_endpoint', 'customer-logout');
if (! empty($customer_logout)) {
foreach ($items as $key => $item) {
$path = parse_url($item->url, PHP_URL_PATH);
$query = parse_url($item->url, PHP_URL_QUERY);
if (strstr($path, $customer_logout) || strstr($query, $customer_logout)) {
unset($items[ $key ]);
}
}
}
}
return $items;
}
add_filter('wp_nav_menu_objects', 'wc_nav_menu_items', 10);
注意有一個過濾器鉤wp_nav_menu_objects
。因此,此功能用於過濾導航菜單,並且具體看起來就像它在那裏,以便WooCommerce可以在用戶未登錄時隱藏註銷菜單對象。
現在爲什麼會引發錯誤。我相信它可以回到wordpress鉤子wp_nav_menu_objects
。當再次查看函數時,它看起來像名爲$items
的參數被期望是一個stdClass實例的鍵控數組,但是在第123行中,PHP發現url
屬性不可用。這導致我相信在此之前發生的另一個過濾器不正確地修改$items
數組,以便此過濾器無法正確讀取該屬性。
進一步展望上線185文件WC-頁的functions.php中還有另外一個鉤子此過濾器:
add_filter('wp_nav_menu_objects', 'wc_nav_menu_item_classes', 2);
但是檢查wc_nav_menu_item_classes
表明,它不會做什麼特別的要麼。所以這裏是我的建議基於什麼已經提出:
- 確保WordPress是最新的,您正在運行的WooCommerce的版本可能不兼容。
- 如果您的代碼可以過濾
wp_nav_menu_objects
,請確保您沒有引入將$items
數組更改爲不再包含stdClass實例的錯誤。
- 嘗試禁用/啓用不屬於WooCommerce的第三方插件,您可能會發現其中一個插件過期或只是被竊聽。
祝你好運!
Koda