سلام.
من در افزونه پنل کاربری اومدم برای نمایش آیتمهای سبد خرید از این کلاس استفاده کردم:
<?php
defined( 'ABSPATH' ) || exit;
class CartItems {
public static function get_user_cart_items() {
global $woocommerce;
if ( ! WC()->cart ) {
return [
'items' => [],
'total_price' => 0,
'total_items' => 0,
];
}
WC()->cart->calculate_totals();
$items = WC()->cart->get_cart();
$subtotal = WC()->cart->get_cart_subtotal();
$total_items = WC()->cart->get_cart_contents_count();
return [
'items' => $items,
'total_price' => $subtotal,
'total_items' => $total_items,
];
}
}
توی ویو هم طبق معمول اینکار کردم:
include_once UPP_DIR . 'utility/woocommerce/CartItems.php';
$cart_data = CartItems::get_user_cart_items();
آیتمهای سبد خرید ووکامرس رو من دریافت میکنم و به درستی همچی کار میکنه و میتونم با ایجکس آیتم از سبد خرید حذف و اضافه کنم.
اما یک php Notice هم توی لاگ دریافت میکنم با این مضمون:
PHP Notice: get_cart() should not be called before the wp_loaded action
این پیغام رو نتونستم برطرفش کنم. حتی اومدم متد داخل کلاس رو به اکشن wp_loaded هم وصل کردم. اما اکی نشد.
یه نکته توی این سیستم روتینگ هست که متوجه نمیشم. وقتی من چک کردم که آیا اکشن wp_loaded توی روتهای این پنل فایر شده یا نه، چند بار فایر شده؟ کلا اتفاق نمیافته.
if (did_action('wp_loaded') > 0) {
echo 'اکشن wp_loaded اتفاق افتاده است.';exit;
} else {
echo 'اکشن wp_loaded اتفاق نیافتاده است.';exit;
}
و به خاطر همین فکر کنم وقتی از کلاس کارت آیتم استفاده میکنم این خطا در لاگ سیستم ثبت میشه.
این پیغام چقدر میتونه مهم باشه؟
ایده خودم اینه که ووکامرس رو توی فایل اصلی پلاگین اینکلودش کنم اما نمیدونم کار درستیه یا نه و یا کلا کار کنه یا نه. لطفا راهنمایی ام کنین.