ایجکس (Ajax) در وردپرس و اشتباهات مرگباری که توسعه دهنده وردپرس در قالب انجام می دهد؟

ایجیکس (Ajax) یکی از فناوری های ارتباط هماهنگ هست که در بسیاری از قالب ها و افزونه های وردپرس که در مارکت وجود دارد استفاده می شود.یک توسعه دهنده وردپرس در درجه ی اول میبایست سرعت انجام عملیات کاربر را افزایش دهد.یکی از روش هایی که به تعامل سریع تر و زیباتر پروژه های وردپرس کمک فراوانی می کند، استفاده از فناوری ایجکس می باشد.

متاسفانه تا به امروز قالب ها و افزونه های زیادی را مشاهده کردم که اصلا در برنامه نویسی های آن به مستندات وردپرس توجهی نداشته اند. و روش های اشتباهی را برای ایجاد ساختار دستورات Ajax در وردپرس به کار گرفته اند.نتیجه نهایی آن کاهش سرعت و افزایش حجم ریکوئست ها و درخواست به سمت سرور هاست وردپرس شد و در نهایت نتیجه گیری در ذهن مخاطب که وردپرس بدرد نمیخورد.

سرفصل های محتوا

    چرا از ایجکس در وردپرس استفاده می کنیم؟

    به صورت کلی 3 دلیل اصلی برای استفاده از ایجکس در وردپرس وجود دارد:

    استفاده از افزونه های کش وردپرس

    زمانی که ما در وردپرس از افزونه های کش (WordPress Cache) استفاده می کنیم. دیگر صفحات به صورت داینامیک بارگزاری نمی شوند. یعنی زمانی که شما اولین بار صفحه ای از یک سایت وردپرس را در مرورگر باز می کنید. آن صفحه در وردپرس کش می شود و برای دیگر بازدید کنندگان جهت افزایش سرعت از نسخه ی کش شده بارگزاری می شود.

    حال فرض کنید شما در صفحه ی خود بخشی دارید که می بایست داینامیک باشد. مثلا می خواهید محصولات فروشگاه به شکل تصادفی نمایش داده شود ، یا تاریخ امروز به شمسی در بالای سایت پدیدار شود.در این حالت یکی از بهینه ترین روش ها اینگونه هست که برای این بخش ها ما از ایجکس (Ajax) در وردپرس استفاده کنیم تا شامل کش سرور نباشد.

    افزونه های کش وردپرس مانند LiteSpeed یا WP Rocket یا W3 Total Cache و …. در حالت عادی درخواست های آجاکس و REST API وردپرس را در فایل ذخیره یا کش نمی کنند

    سرعت بارگزاری سریع تر وب سایت وردپرس

    در ایجکس وردپرس شما این قابلیت را دارید که فقط بخشی از صفحه را مجدد با محتوا و داده های جدید بارگزاری کنید، این کار باعث می شود که صفحه در مرورگر کاربر رفرش نشود. این کار ن تنها لذت کار با سایت شما را برای بازدید کننده افزایش می دهد. بلکه سرعت عملکرد پروسس وردپرس نیز بالاتر می رود. چون وردپرس در این حالت موظف هست آن بخش به خصوص را مجدد بارگزاری کند ن کل صفحه را.

    یکی از مثال های بارز ایجکس در وردپرس برای افزونه ووکامرس ، قسمت سبد خرید یا Cart هست که در اکثر قالب بعد از فشردن دکمه های افزودن به سبد خرید، کاربر به صفحه ی دیگر هدایت نمی شود بلکه سبد خرید کاربر در ووکامرس بروز رسانی می شود.

    البته نا گفته نماند افزونه ووکامرس اشتباهاتی را در بخش ایجیکس وردپرس انجام داده که اگر مقاله را تا پایان بخوانید متوجه این موضوع خواهید شد.

    جداسازی بخش فرانت و بک اند پروژه وردپرس

    یکی از اصولی ترین روش های برنامه نویسی و توسعه استارتاپ چه در بستر وردپرس یا هر فریم ورک دیگری مثل لاراول و .. ، جداسازی بخش فرانت اند (Front-End) و بک اند (Back-End) می باشد. ما بوسیله ی ایجاد درخواست های Ajax در وردپرس این قابلیت را به آن اضافه می کنیم که از داده های وردپرس خود ن تنها در قالب سایت ، بلکه در هر پلتفرم دیگری نیز استفاده کنیم.

    من در این مقاله یک مثال از این روش برای توسعه استاندارد و طراحی سایت های وردپرس زدم که حتما مطالعه کنید:

    استفاده از وب سرویس وردپرس در برنامه نویسی قالب وردپرس حتما بخوانید : برنامه نویسی قالب وردپرس بر اساس متد یکسازی سازی REST API وردپرس

    انواع روش های ایجکس در وردپرس چیست؟

    3 روش اصلی برای درخواست های ایجکس (Ajax) در وردپرس وجود دارد که هر کدام دارای معایب و مزایای خودش هست:

    روش اول ایجاد درخواست ایجکس در وردپرس بوسیله ی فایل admin-ajax.php می باشد، این روش عمومی ترین و در عین حال بدترین روش ارسال درخواست های ایجکس در وردپرس می باشد که اکثر قالب ها و افزونه ها طبق آموزش های سطح پایین در وب از آن استفاده می کنند.

    روش دوم استفاده از وب سرویس (REST API) وردپرس می باشد. با توجه به پیشرفت روز افزون بحث توسعه ی اپلیکیشن ها و WordPress Headless ، بسیاری از پلاگین ها مانند Contact Form 7 یا  Yoast Seo درخواست های خود را به سبک REST API بهینه کرده اند.

    روش سوم استفاده از متد Rewrite API هست که میتوان آن را بهینه ترین حالت برای ارسال درخواست ایجکس سمت کاربر دانست.در این روش با ایجاد یک آدرس اختصاصی در رده ی اول ریکوئست های وردپرس آن را ملزم به فراخوانی داده ها می کنیم.

    مقایسه عملکرد سرعت روش های Ajax در وردپرس

    اگر به فایل wp-settings.php در هسته ی وردپرس که فایل مرجع برای لود تمامی بخش ها و توابع هسته ی وردپرس هست دقت کنیم. خواهیم دید که بخش Rewrite مرتبط با initialization وردپرس می باشد یعنی قسمتی که ابتدا فراخوانی می شود. سپس بعد از ضمیمه شدن کلاس کوئری ها در وردپرس به بخش فایل های REST API خواهیم رسید.

    اگر همین امر را مبنا قرار دهیم سرعت دسترسی وردپرس به بخش Rewrite سریع از دو مورد دیگر انجام می شود. این خود میتواند یکی از دلایل اصلی ارجحیت ایجکس وردپرس بر اساس سیستم پیوند های یکتای مرکزی یا Rewrite باشد.در تست هایی که توسط توسعه دهندگان وردپرس در تعداد درخواست زیاد صورت گرفته است استفاده از ایجکس در وردپرس بر اساس روش Rewrite میتواند 40% سرعت درخواست های وردپرس را بهبود ببخشد.

    پس در یک جمع بندی برای روش درخواست ای جکس در وردپرس خواهیم داشت:

    انواع روش ایجکس در وردپرس

    قوانین پیش فرض درخواست های ایجکس در وردپرس

    دو قانون را میبایست در زمان برنامه نویسی درخواست Ajax در وردپرس رعایت کنید. زیرا اشتباه در هر کدام می تواند نتیجه ی عکس برای شما در بر داشته باشد.

    استفاده از فرمت داده های json در خروجی ایجیکس وردپرس

    تمامی داده هایی که قرار است از درخواست ایجکس وردپرس دریافت شود میبایست بر اساس فرمت داده های رشته String و یا json باشد.اشتباهی که بسیاری از افزونه ها و قالب های وردپرس انجام می دهند ارائه خروجی های HTML در بستر ایجکس وردپرس می باشد. این کار صدمه ی شدید به رویکرد درخواست می زند.این اشتباه مهلک حتی در افزونه هایی مانند ووکامرس (WooCommerce) هم گاها به چشم می خورد.

    کاربر را معطل انجام پروسس های وردپرس نکن

    یادتان که نرفته هدف اولیه ما برای ایجاد درخواست های ایجکس راحتی UX و لذت استفاده از وب سایت یا اپلیکیشن وردپرسی ما می باشد. به هیچ عنوان نبایستی عملیات سنگینی در درخواست های ایجکس وردپرس انجام شود و کاربر چندین ثانیه معطل یک پاسخ از سمت وردپرس باشد.

    در هر کجای درخواست ایجکس اگر لحظه ای گمان کردید که احتمال دارد در بازدید های زیاد کاربر معطل بماند میبایست پیام موفقیت آمیز بودن یا نبودن را ابتدا نمایش دهید و کار را به بخش Cronjob یا پشت صحنه وردپرس واگذار کنید.

    فرض کنید می خواهید بعد از ثبت نام کاربر یک ایمیل به آن بزنید ، بهترین حالت برنامه نویسی این است که پیام موفقیت آمیز بودن ثبت را کاربر دریافت کند، سپس یک Scheduled به وردپرس اضافه کند تا در سریع ترین زمان ممکن توسط تابع wp_mail ایمیل را ارسال کند. چون شاید در یک مواقع SMTP سرور با خطا روبرو شود برای همین کاربر چند ثانیه معطل می ماند که ایمیل ارسال شود و این کار جایز نیست.

    ایجاد درخواست ایجکس توسط متد admin-ajax در وردپرس

    تمامی درخواست ها به فایل مرکزی admin-ajax.php ارسال می شوند. هر درخواست دارای یک شناسه به خصوص می باشد که میبایست به صورت پارامتر action به این فایل ارسال شود.فرض کنید میخواهیم یک درخواست ایجکس در وردپرس ایجاد کنیم برای دریافت اطلاعات پست با شناسه ی 1 در وردپرس و میخواهیم نام آن را get_post_detail بگذاریم.

    در این حالت آدرس درخواست ایجکس ما در وردپرس، با فرض اینکه نام دامنه ی ما site.com باشد:

    http://site.com/wp-admin/admin-ajax.php?action=get_post_detail

    فایل admin-ajax.php در پوشه ی wp-admin  وردپرس وجود دارد.چقدر عجیب است ن؟

    نحوه ی ایجاد درخواست admin-ajax در وردپرس

    دو  هوک وردپرس وجود دارد تا بتوان درخواست های ایجکس به سبک admin-ajax را به هسته ی وردپرس معرفی کرد:

    add_action( 'wp_ajax_{name}', 'function_name' );
    add_action( 'wp_ajax_nopriv_{name}', 'function_name' );

    در بخش {name} میبایست نام درخواست خود را وارد کنیم.در مثال فعلی ما نام درخواست ایجکس get_post_detail میباشد پس خواهیت داشت:

    add_action( 'wp_ajax_get_post_detail', 'function_name' );
    add_action( 'wp_ajax_nopriv_get_post_detail', 'function_name' );

    تفاوت حالت no private و private در چه می باشد؟

    شما نیازی ندارید که هر دو هوک را برای ایجاد یک درخواست ایجکس در وردپرس بنویسید.admin ajax همان طور که از اسمش پیداست، برای ایجاد درخواست های ایجکس در محیط مدیریت وردپرس هست. اما متاسفانه قالب ها در بخش فرانت نیز از آن استفاده میکنند.

    از آن جا که مدیریت وردپرس به صورت پیش فرض برای کسانی نمایش داده خواهد شد که در سایت وردپرس لاگین (Login) هستند. پس هوک شماره دو یعنی no private را زمانی استفاده می کنیم که می خواهیم یک درخواست را تمامی کاربران وردپرس چه آنهایی که لاگین هستند و چه نیستند مشاهده کنند.

    اما اگر از هوک شماره ی یک به تنهایی استفاده کنیم خروجی درخواست ایجکس برای افرادی که لاگین نیستند با خطا مواجه خواهد شد.توضیحات تکمیل تری در مستندات وردپرس اینجا در زمینه ی Ajax in WordPress وجود دارد.

    تابع خروجی داده ها بر اساس json در وردپرس

    قبلا بیان کردیم که حالت استاندارد خروجی Ajax در وردپرس بر اساس ساختار و فرمت Json می باشد. در هسته ی وردپرس دو تابع وجود دارد به نام های wp_send_json_success و wp_send_json_error که می توان برای خروجی داده ها در Ajax استفاده کرد.

    تفاوت این دو تابع زمانی است که شما میخواهید موفقیت یا ناموفق بودن عملیات را به سیستم ارائه دهید.اگر عملیات ایجکس در وردپرس موفق بود مسلما از تابع Success استفاده می کنیم و اگر ناموفق بود از تابع Error.این دو تابع در مقدار Status Code و پارامتر Success که به صورت boolean می باشند، تفاوت دارند.

    حال بیایید مثال خود را تکمیل کنیم. قرار است اطلاعات پست شماره یک را برای تمامی کاربران نمایش دهیم پس خواهیم داشت:

    add_action('wp_ajax_nopriv_get_post_detail', 'ajax_get_post_detail');
    function ajax_get_post_detail()
    {
    	$post = get_post(1);
    	$array = [
    		'title' => $post->post_title,
    		'link' => get_the_permalink(1),
    		'content' => $post->post_content
    	];
    
    	wp_send_json_success($array, 200);
    }

    اگر آدرس بالا را در مرورگر یا نرم افزار POSTMAN تست کنیم. خروجی داده ها به این شکل خواهد شد:

    تست ایجکس وردپرس در نرم افزار پست من POST MAN

    دقت کنید که ساختار تابع wp_send_json_success به دو قسمت success که وضعیت عملیات و data ، مقدار های بازگشتی تقسیم می شود.همچنین میتوانیم Status Code های دلخواه خود را به این تابع اضافه کنیم.

    حال که برنامه نویسی سمت وردپرس تکمیل شد میتوانید در قسمت فرانت با هر فریم ورکی که دوست دارید آن را بارگزاری کنید. مثلا اگر با پیش فرض کتابخانه JQuery کار می کنید خواهیم داشت:

    <script>
    jQuery(document).ready(function ($) {
    	$.ajax({
    		url: "<?php echo admin_url('admin-ajax.php'); ?>",
    		type: "GET",
    		dataType: "json",
    		contentType: "application/json; charset=utf-8",
    		cache: false,
    		data: {
    			'action': 'get_post_detail'
    		},
    		success: function (data, textStatus, xhr) {
    			$("#post").html(data.data.content);
    		},
    		error: function (xhr, status, error) {
    			alert(xhr.responseJSON.html);
    		}
    	});
    });
    </script>

    چه زمانی باید از admin-ajax استفاده کنیم؟

    از روش ایجاد درخواست های ایجکس در وردپرس بوسیله ی admin-ajax تنها برای مدیریت آن هم درخواست هایی که پروسس زیادی ندارند میبایست استفاده شود.استفاده از روش Admin-ajax برای قالب و افزونه ها در بخش فرانت اند کاملا غیر استاندارد می باشد.

    ایجکس در وردپرس بر اساس متد وب سرویس یا REST API

    بیایید مثال قبل را به روش REST API وردپرس انجام دهیم.مزیت استفاده از روش REST API وردپرس نسبت به admin-ajax در دو چیز می باشد:

    1. اگر در حال برنامه نویسی یک استارتاپ هستید که در پلتفرم های مختلفی قرار هست آن را پیاده سازی کنید. شما با این کار، یک بار برنامه نویسی می کنید و در همه جا استفاده می کنید.
    2. سرعت وب سرویس وردپرس در تست های انجام شده 15% بیش تر از درخواست های admin-ajax وردپرس می باشد.

    دقت کنید: در وب سرویس یا REST API وردپرس دیگر احراز هویت و Cookie ها فعال نیستن به همین دلیل شما می بایست تابع قوانین Permission Callback در REST API وردپرس باشید.

    برای ایجاد یک Route جدید در وب سرویس وردپرس از تابع register_rest_route استفاده می کنیم:

    # Create WordPress REST API Route
    add_action('rest_api_init', 'create_route');
    function create_route()
    {
    	register_rest_route('post', 'get_detail', [
    		'methods' => 'GET',
    		'callback' => 'get_post_detail'
    	]);
    }
    
    # Get List Post Method
    function get_post_detail(WP_REST_Request $request)
    {
    	$post = get_post(1);
    	$array = [
    		'title' => $post->post_title,
    		'link' => get_the_permalink(1),
    		'content' => $post->post_content
    	];
    
    	return new WP_REST_Response($array, 200);
    }

    حال اگر در مرورگر آدرس زیر را وارد کنید، خروجی وب سرویس وردپرس را مشاهده خواهید کرد:

    http://site.com/wp-json/post/get_detail

    اگر با خطای 404 وردپرس مواجه شده اید ، نیازمند آن هستید که یکبار پیوندهای یکتای وردپرس را بروز رسانی یا Flush کنید.ساده ترین راه برای این کار استفاده از خط فرمان وردپرس (WP-CLI) و دستور زیر می باشد:

    wp rewrite flush

    ایجکس در وردپرس بر اساس متد استاندارد Rewrite API

    برای ایجاد درخواست های ایجکس بر اساس کلاس Rewrite API در قدم اول میبایست یک آدرس جدید در وردپرس معرفی کنیم. برای اینکار ساده ترین روش استفاده از تابع add_rewrite_rule میباشد.من قبلا مطلبی برای مثال های کاربردی تر این تابع زدم که میتوانی از این جا مطالعه کنی:

    امنیت درخواست در وردپرس حتما بخوانید : افزایش امنیت درخواست GET در برنامه نویسی استارتاپ وردپرس

    مسیر جدید را می توانیم در هوک وردپرس init قرار دهیم به سادگی:

    # Define New Rewrite Url Params
    add_action('init', 'define_ajax_url');
    function define_ajax_url()
    {
    	add_rewrite_tag('%rewrite_ajax%', '([^&/]+)');
    	add_rewrite_rule('ajax/?([^/]*)', 'index.php?rewrite_ajax=$matches[1]', 'top');
    }

    همیشه بعد از اینکه تغییراتی در Rewrite وردپرس ایجاد شد ، باید یکبار پیوند های یکتا را در بخش تنظیمات وردپرس بروز رسانی کنید. ما توسط کد بالا به وردپرس یک آدرس جدید معرفی کردیم.

    اگر میخواهید در افزونه های وردپرس از Rewrite API استفاده کنید مثلا یک مسیر ایجکس جدید معرفی کنید یا یک پست تایپ ایجاد کنید ، حتما میبایست در قسمت register_activation_hook یکبار عملیات Flush را اجرا کنید.

    حال میتوانیم دستورات خود را براحتی برنامه نویسی کنیم:

    # Define Get Post Detail
    add_action('template_redirect', 'get_post_detail');
    function get_post_detail()
    {
    	global $wp_query;
    
    	# Don't do anything unless this is an AJAX request
    	$method = $wp_query->get('rewrite_ajax');
    	if (!$method) {
    		return;
    	}
    
    	# Check method name
    	if ($method == "get_post_detail") {
    		$post = get_post(1);
    		$array = [
    			'title' => $post->post_title,
    			'link' => get_the_permalink(1),
    			'content' => $post->post_content
    		];
    
    		wp_send_json_success($array, 200);
    	}
    }

    در کد بالا ابتدا بررسی کردیم ، آیا Rewrite Tag که معرفی کردیم به نام rewrite_ajax در آدرس درخواستی کاربر وجود دارد یا خیر. در صورت وجود داشتن و برابر بودن آن مقدار با get_post_detail کد Json برای کاربر به نمایش در میاید. شما میتوانید دستورات متعدد زیادی بوسیله همین شرط آن جا اضافه کنید.

    اگر کاربر وارد آدرس زیر در مرورگر شود خروجی را خواهد دید:

    http://site.com/ajax/get_post_detail

    اگر دقت کرده باشید در روش Rewrite API حتی نوع آدرس درخواست ها هم به انتخاب خودمان هست و کاملا آزاد هستیم.
    خروجی کار به فرمت Json بدین شکل هست:

    {
        "success": true,
        "data": {
            "title": "سلام دنیا!",
            "link": "http://site.com/سلام-دنیا/",
            "content": "به وردپرس خوش آمدید. این اولین نوشتهٔ شماست!"
        }
    }

    در Rewrite API هم مشابه Admin Ajax ما به کوکی های وردپرس دسترسی داریم این بدان معناست که توابع احراز هویت بدون هیچ تنظیمات خاصی اجرا می شوند.اگر به درخواست های ایجکس افزونه ووکامرس دقت کرده باشید همه ی آن ها در یک مسیر جداگانه ای با پسوند wc-ajax می باشند. این بدین معنا هست که افزونه ووکامرس نیز از Rewrite API استفاده کرده است.

    آقای درزی سوال پیش اومده واسه خیلی ها تو این لحظه، اگر متد Rewrite API سرعت آن از REST API و Admin Ajax بیش تر است پس چرا اصلا REST API بوجود آمد؟ خب همه ی توسعه دهندگان وردپرس ی سره از این استفاده می کردند؟

    پاسخ این سوال واضح هست ، ما در وب سرویس یا REST API وردپرس، استاندارد هایی داریم که برای ارتباط بین سرور و پلتفرم ها از نظر پروتکل HTTP و امنیتی الزامی هستند مثل بحث authentication.پس نباید چنین مقایسه ای انجام داد و هر کدام را در جای خودش میبایست استفاده کرد.

    نتیجه گیری ایجکس در وردپرس

    نتیجه گیری بدین شکل شد ، شما برای ایجکس در افزونه و قالب در بخش فرانت اند و سایت از Rewrite API استفاده می کنید. برای اپلیکیشن ها و پلتفرم های مختلف از REST API استفاده می کنید. از Admin Ajax هم تنها برای محدود درخواست های داخل مدیریت بهره مند می شوید.

    مطلب رو به اشتراک بگذارید
    ۱۹دیدگاه
    در بحث‌‌ پیرامون این مقاله شرکت کنید!
    ارسال دیدگاه
    • احسان فراهانی

      احسان فراهانی

      شنبه ۲۹ آبان ۱۴۰۰ ۱۰:۲۵ ب٫ظ

      خدایی همین یه آموزش با اندازه کل دوره های ضعیف و سرکاریه سایت های معروف ک میشناسیم میارزه واقعا دستتون درد نکنه با این مقالات ناب و ارزشمند و کمیاب

    • avatar

      م.آ

      دوشنبه ۱۳ تیر ۱۴۰۱ ۹:۰۸ ق٫ظ

      سلام در استفاده از Rewrite API مدام با پیغام 404 روبرو می شم چون تمپلیت داخل سرور هست نمی دونم چطور بدون Cli بتونم Flush permalink کنم

      • مهرشاد درزی

        مهرشاد درزی

        سه شنبه ۱۴ تیر ۱۴۰۱ ۸:۵۹ ق٫ظ

        شما کافی است در مدیریت وردپرس در قسمت تنظیمات پیوند های یکتا یکبار گزینه ذخیره را بزنید تا flush انجام شود.

    • avatar

      احسان روانبخش

      شنبه ۱۹ شهریور ۱۴۰۱ ۸:۲۰ ق٫ظ

      سلام وقتتون بخیر، من از روش rewrite api برای ایجکس استفاده کردم اما در این روش مثل wp-admin میشه ورودی هارو به صورت post ارسال کرد؟ چون الان به نظر فقط میشه اطلاعات به صورت get و در url ارسال کرد.
      باتشکر

      • مهرشاد درزی

        مهرشاد درزی

        شنبه ۱۹ شهریور ۱۴۰۱ ۸:۵۹ ق٫ظ

        خیر هیچ تفاوتی ندارد ، شما می توانید به صورت formData در Ajax توسط پارامتر data استفاده کنید.

      • احسان روانبخش

        احسان روانبخش

        دوشنبه ۲۱ شهریور ۱۴۰۱ ۹:۳۶ ق٫ظ

        سلام مجدد، ممنون از توضیحاتتون اما من به روشpost ، data رو ارسال میکنم اما در قسمت بکند ما از $wp_query->get(); جهت دریافت اطلاعات استفاده میکنید من از $_post هم استفاده کردم اما اطلاعاتی موجود نبود اما در روش wp-admin اطلاعات در $_post قابل دریافت هست. در این روش چطور باید اطلاعات post رو دریافت کنیم؟

      • مهرشاد درزی

        مهرشاد درزی

        دوشنبه ۲۱ شهریور ۱۴۰۱ ۹:۵۶ ق٫ظ

        دوست عزیز WP_Query برای دریافت اطلاعات ورودی پارامتر های آدرس یا Rewrite استفاده می شود ، شما برای دریافت اطلاعات ورودی فرم ها از همان POST و GET و یا بطور کلی REQUEST در همان آدرس می توانید استفاه کنید. این دو مقوله کاملا مجزا هستند.

      • احسان روانبخش

        احسان روانبخش

        دوشنبه ۲۱ شهریور ۱۴۰۱ ۹:۵۶ ق٫ظ

        مشکل حل شد، روش ارسال اطلاعاتم مشکل داشت الان اصلاح کردم اطلاعات درست نمایش داده میشه در بک اند.
        ممنون از معرفی این روش عالی

    • حمید حسینی تبار

      حمید حسینی تبار

      دوشنبه ۱۸ اردیبهشت ۱۴۰۲ ۱:۴۲ ب٫ظ

      سلام آقای درزی
      نظرتون در مورد استفاده از lumen و یا laravel برای ایجاد api سفارشی در وردپرس چیه؟
      اینطوری بجای کار با $wpdb میشه از eloquent استفاده کرد که از لحاظ امنیتی بسیار بهتر و سینتکس قویتری داره.
      ممنونم

      • مهرشاد درزی

        مهرشاد درزی

        دوشنبه ۱۸ اردیبهشت ۱۴۰۲ ۴:۱۲ ب٫ظ

        لود کردن کامل این فریم ورک ها در وردپرس کار اشتباهی هست چون باید مواردی مانند کش و .. بررسی گردد. از طرفی قرار دادن فایل wp-load در یک پروژه لاراولی هم اشتباه هست چون هوک های وردپرس مختل می شود.
        اگر از جداول اختصاصی در پروژه استفاده می کنید از پکیج tareq1988/wp-eloquent می توانید بهره مند شوید. همچنین اخیرا افزونه ای آماده کردم برای استفاده از Validation های حرفه ای لاراول در API وردپرس برای Custom Endpoint.
        آدرس:
        https://github.com/mehrshaddarzi/wp-rest-api-validate

      • حمید حسینی تبار

        حمید حسینی تبار

        دوشنبه ۱۸ اردیبهشت ۱۴۰۲ ۱۱:۴۹ ب٫ظ

        ممنونم
        استفاده از این 3 روش api رو خیلی خوب و عالی توضیح دادید
        مورد اول و دوم رو میدونستم ولی نکات شون و مورد سوم برام تازگی داشت.
        یک سوال کلی: بنظر شما وردپرس بهمراه فروشگاه ووکامرس برای چه تهداد کاربر همزمان جوابگو هست؟
        آیا دوره ای دارید که برای کمتر شدن زمان لود سایتهای وردپرسی به بهترین شکل تهیه کنیم؟

      • مهرشاد درزی

        مهرشاد درزی

        سه شنبه ۲۶ اردیبهشت ۱۴۰۲ ۳:۳۱ ب٫ظ

        پاسخ به این سوال به عوامل بسیار متعددی بستگی دارد از نحوه برنامه نویسی و صف ریکوئست ها تا کانفیگ سرور در وردپرس ، حتی به نوع انتخاب بانک اطلاعاتی هم بستگی دارد ، همه خودشان رو محدود به MySQL می کنند در صورتی که میتوان از این فراتر رفت.
        در مورد سوال دوم شناخت از نحوه ی عملکرد وردپرس ، شما را تا حد قابل قبول از جریاناتی که در هسته ی وردپرس اتفاق می افتد آگاه می کند و همین شناخت باعث می شود که به خوبی ریکوئست ها را درک کنید. در دوره های منتور شیب خصوصی خودم به این مراتب می پردازم.

    • avatar

      محمد صادقی

      شنبه ۱۵ مهر ۱۴۰۲ ۴:۰۸ ب٫ظ

      سلام وقت بخیر
      امنیت مدل Rewrite API به چه صورت است ؟
      تا جایی که فهمیدم هر بار url را روی آدرس بار قرار دهیم اجرا میشود، درست است ؟ این بد نیست از نظر امنیتی ؟

      • مهرشاد درزی

        مهرشاد درزی

        شنبه ۱۵ مهر ۱۴۰۲ ۹:۴۹ ب٫ظ

        بصورت کلی بحث route ربطی به middleware ها و امنیت ندارد.ما در API وردپرس از پارامتر permission callback استفاده می کنیم. در Rewrite API هم شما کافیه در ابتدای کد دستوری خودتان موارد امنیتی و سطح دسترسی کاربر را چک کنید.

    • avatar

      علی

      یکشنبه ۲۳ مهر ۱۴۰۲ ۰:۰۲ ق٫ظ

      سلام وقت بخیر
      لطفا بفرمایید برای ساخت فرم ورود و ثبت نام به صورت ایجکس کدام روش سریع تر و امن تر است؟
      بنده اکنون برای نوشتن این دو فرم از admin-ajax استفاده کرده ام.
      ممنون

      • مهرشاد درزی

        مهرشاد درزی

        یکشنبه ۲۳ مهر ۱۴۰۲ ۶:۲۱ ق٫ظ

        روش Rewrite API گزینه مناسب تری می باشد.

    • avatar

      محمد جواد

      شنبه ۱۶ تیر ۱۴۰۳ ۴:۳۹ ب٫ظ

      سلام
      کدها و اسکریپت های جاوا رو کجا باید بنویسیم ؟

      • مهرشاد درزی

        مهرشاد درزی

        شنبه ۱۶ تیر ۱۴۰۳ ۵:۳۰ ب٫ظ

        شما میبایست در فایل js قرار دهید و به صفحه خود ضمیمه کنید توسط هوک wp_enqueue_scripts در وردپرس.
        مستندات:
        https://developer.wordpress.org/reference/hooks/wp_enqueue_scripts/

      • avatar

        محمد جواد

        یکشنبه ۱۷ تیر ۱۴۰۳ ۱۲:۳۲ ب٫ظ

        سلام مجدد

        من فایل js رو ضمیمه کردم با تابع wp_send_json_success هم فراخوانی شد خروجیش هم این میاد

        {
        "success": true,
        "data": {
        "tID": 100000000000,
        "tName": "assssiaaaaaaaaaaaaa"
        }
        }

        این یعنی که درست فراخوانی شده . درست متوجه شدم؟

        حالا من می خواهم مقداری که براش می فرستم رو به select box اضافه کنه ولی نمی کنه
        برای امتحان یه alert هم توی اسکریپت گذاشتم ولی نشون نداد

        این هم اسکریپتی که نوشتم

        jQuery(document).ready(function ($) {
        $.ajax({
        url: "",
        type: "GET",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        cache: false,
        data: {
        'action': 'add_translator'
        },
        success: function (data, textStatus, xhr) {
        alert(xhr.responseJSON.html);
        $("#tSelectBox").append('option6');
        },
        error: function (xhr, status, error) {
        alert(xhr.responseJSON.html);
        }
        });
        });

    آکادمی وردپرس واقعی

    دوره جامع مدیریت حرفه ای استارتاپ های وردپرس با خط فرمان و ابزار پکیج منیجر

    در دوره جامع WP-CLI یاد خواهید گرفت، به شکل کاملا حرفه ای و با سرعت بیش تر یک یا چند وب سایت وردپرسی خود را مدیریت کنید.عملیات تکراری در مدیریت وردپرس را برای کاهش هدر رفت زمان خود سیستم سازی کنید. وردپرس شما در حین کار با خط فرمان فشار کم تری به سرور ایجاد می کند و این رویکرد می تواند وب سایت شما را بدون نقص و با سرعت عالی ارائه دهد
    • محتوای آموزشی: ۴۶ جلسه آموزشی شامل ۱۶ ساعت ویدیو آموزشی به همراه تمرینات و فایل PDF خلاصه محتوا
    • پروژه عملی دوره: نصب و مدیریت کامل بخش های یک استارتاپ وردپرس در هاست
    • کلاس رفع اشکال: کلاس آنلاین ۳۰ دقیقه ای در پایان دوره به صورت کاملا خصوصی با استاد درزی برای تثبیت محتوا و رفع اشکالات دانشجو
    ۳,۶۹۷,۰۰۰ تومان
    سرویس ها و خدمات وردپرس

    اتصال نرم افزار حسابداری هلو به افزونه فروشگاه ساز ووکامرس به همراه پکیج وب سرویس دو طرفه

    اتصال دو طرفه بخش انبارداری یا محصولات ، مشتریان و فاکتور های نرم افزار حسابداری هلو با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۱۸,۰۰۰,۰۰۰ ۱۳,۸۴۰,۰۰۰ تومان

    استعلام سامانه اعتبار سنجی اشخاص حقیقی و حقوقی با کد ملی و شماره همراه در پنل ووکامرس

    قابلیت استعلام در سامانه اعتبار سنجی اشخاص حقیقی و حقوقی برای پرداخت های اعتباری در پنل فروشگاه ووکامرس بر اساس کد ملی و شماره همراه مشتریان وردپرس
    ۴,۵۰۰,۰۰۰ ۲,۸۷۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری مهر باستان به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات و فاکتور های نرم افزار جسابداری مهر باستان با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۱۲,۰۰۰,۰۰۰ ۸,۵۶۷,۰۰۰ تومان

    اتصال نرم افزار حسابداری سپیدار همکاران سیستم به افزونه ووکامرس [افزودنی پکیج وب سرویس دو طرفه]

    اتصال دو طرفه بخش انبارداری یا محصولات و فاکتور های نرم افزار حسابداری سپیدار از شرکت همکاران سیستم با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۲۰,۷۳۰,۰۰۰ ۱۳,۴۷۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری دشت همکاران سیستم به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات ، مشتریان و فاکتور های نرم افزار حسابداری دشت همکاران سیستم با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۸,۰۰۰,۰۰۰ ۶,۴۷۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری راهکاران همکاران سیستم به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات ، مشتریان و فاکتور های نرم افزار حسابداری راهکاران از شرکت همکاران سیستم با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۲۵,۰۰۰,۰۰۰ ۱۴,۶۳۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری گیو به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات و فاکتور های نرم افزار جامع حسابداری گیو با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۱۵,۰۰۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری ترنج رهیافت به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات و فاکتور های نرم افزار حسابداری ترنج رهیافت با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۱۰,۰۰۰,۰۰۰ ۸,۵۹۷,۰۰۰ تومان

    اتصال نرم افزار حسابداری باران به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات ، مشتریان و فاکتور های نرم افزار حسابداری باران با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۱۰,۰۰۰,۰۰۰ ۸,۴۳۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری کیان نور رایانه به فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات و فاکتور های نرم افزار حسابداری کیان نور رایانه با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۱۸,۰۰۰,۰۰۰ ۱۳,۸۴۰,۰۰۰ تومان

    اتصال یک یا چند پنل فروشندگان دیجی کالا به افزونه فروشگاه ساز ووکامرس

    اتصال و هماهنگی بخش محصولات ، و سفارشات پنل فروشندگان دیجی کالا با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول و مدیریت لیست سفارشات دیجی کالا در مدیریت وردپرس
    ۱,۵۰۰,۰۰۰ ۱,۲۰۰,۰۰۰ تومان

    اتصال استاندارد رسانه های وردپرس ، فایل های ووکامرس ، EDD و گرویتی فرم به هاست دانلود

    افزایش هشتاد درصدی سرعت وب سایت های وردپرس با اتصال تصاویر ، ویدیو ، صوت و فایل های فروشگاه ووکامرس ، Easy Digital Downloads و گرویتی فرم به هاست دانلود با قابلیت تغییر لینک اتوماتیک رسانه ها در محتوا و محافظ از سرقت فایل فروشی
    ۲,۰۰۰,۰۰۰ ۱,۴۷۰,۰۰۰ تومان

    اتصال نرم افزار حسابداری ابری رادیکال به افزونه فروشگاه ساز ووکامرس

    اتصال دو طرفه بخش انبارداری یا محصولات و فاکتور های نرم افزار حسابداری ابری رادیکال با افزونه فروشگاه ساز ووکامرس ، همراه با قابلیت بروزرسانی هماهنگ موجودی ها و قیمت های محصول ، ایجاد فاکتور های اتوماتیک به نام مشتریان وردپرس در نرم افزار حسابداری
    ۸۰۰,۰۰۰ ۴۹۷,۰۰۰ تومان