💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ میثم کیانی
ریفکتور فانکشن is_user_liked_post
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۰۴ خرداد ۱۴۰۳

سلام وقت بخیر خدمت استاد صالحی عزیز و منتورهای گرامی؛

من روی فانکشن is_user_liked_post یک ریفکتور داشتم. مورد اول استفاده از in_array بجای foreach. مورد دوم اگر ما اولین بار باشه که اقدام به لایک کنیم و کلیدی توی دیتابیس نداشته باشم با ارور 500 روبه رو میشیم.

function is_user_liked_post( int $user_id, int $post_id ): void {
	$user_liked_post_ids = get_user_meta( $user_id, '_lp_like_post_ids', true );
	if ( metadata_exists( 'user', $user_id, '_lp_like_post_ids' ) ) {
		if ( in_array( $post_id, $user_liked_post_ids ) ) {
			wp_send_json( [
				'error'   => true,
				'message' => 'شما این پست را قبلاً لایک کرده اید.',
			], 403 );
		}
	}
}

سلام،

برای رفع مشکل فانکشن is_user_liked_post و بهبود کد، میتونی به این شکل عمل کنی:

  1. استفاده از in_array بجای foreach.
  2. چک کردن وجود کلید در دیتابیس و جلوگیری از ارور 500.
function is_user_liked_post( int $user_id, int $post_id ): void {
    // بررسی وجود کلید در متادیتا
    if ( ! metadata_exists( 'user', $user_id, '_lp_like_post_ids' ) ) {
        $user_liked_post_ids = [];
    } else {
        $user_liked_post_ids = get_user_meta( $user_id, '_lp_like_post_ids', true );
    }
    // بررسی لایک بودن پست توسط کاربر
    if ( in_array( $post_id, $user_liked_post_ids ) ) {
        wp_send_json( [
            'error'   => true,
            'message' => 'شما این پست را قبلاً لایک کرده‌اید.',
        ], 403 );
    }
}

توی این کد، اول بررسی می‌کنیم که کلید _lp_like_post_ids توی متادیتای کاربر وجود داره یا نه. اگه وجود نداشت، یه آرایه خالی برای $user_liked_post_ids تعریف می‌کنیم. بعدش با in_array چک می‌کنیم که پست قبلاً لایک شده یا نه.

محسن موحد ۰۶ خرداد ۱۴۰۳، ۰۳:۱۵