🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ میثم کیانی
صفحه بندی در پنل ادمین و استفاده از alpine js
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۵ مهر ۱۴۰۲

سلام خدمت استاد صالحی و منتور‌های گرامی، وقتتون بخیر. من دوتا سوال داشتم،

سوال اول من بخش ایجکس رو اومدم با استفاده از alpine js هندل کردم و به خوبیم کار میکنه فقط تنها بدیش اینکه باید کدهای جاوا اسکریپتشو دقیقا زیر فایل‌های html بزارم و وقتی که این فایل رو جدا میکنم میبرمش داخل یک پوشه دیگه به درستی کار نمیکنه میخواستم بدونم چطوری میشه از alpine توی یه فایل خارجی استفاده کرد؟ اینم بگم من همه پیشنیاز هارو رعایت کردم

این نمونه کد منه توی alpine js :

<h2>form</h2>
<form x-data="formHandler()" @submit.prevent="submitForm">
    <label for="name">name:</label>
    <input type="text" name="name" id="name" x-model="formData.name">
    <label for="password">password</label>
    <input type="password" name="password" id="password" x-model="formData.password">
    <input type="submit" value="submit">
</form>
<script>
    function formHandler() {
        return {
            formData: {
                name: '',
                password: ''
            },
            submitForm() {
                const ajaxUrl = '<?= admin_url( 'admin-ajax.php' ); ?>';
                const data = new FormData();
                data.append('action', 'alpine_custom_ajax');
                data.append('name', this.formData.name);
                data.append('password', this.formData.password);
                fetch(ajaxUrl, {
                    method: 'POST',
                    body: data,
                })
                    .then(data => {
                        console.log(data);
                        alert("ok");
                    })
                    .catch(error => {
                        console.error('Error:', error);
                    });
            }
        }
    }
</script>

 

اینم بخشی که میره توی حالت فایل جداگانه :

wp_enqueue_script(
		'ajax-alpine',
		BP_PLUGIN_ASSETS.'js/ajax-alpine.js',
		['alpinejs'],
		'1.0.0',
		[
			'strategy'  => 'defer',
			'in_footer' => true
		]
	);
	$localized_data = array(
		'adminAjaxUrl' => admin_url('admin-ajax.php'),
	);
	wp_localize_script('ajax-alpine', 'alpineData', $localized_data);
	// file scripts:
	function formHandler() {
    return {
        formData: {
            name: '',
            password: ''
        },
        submitForm() {
            const ajaxUrl = alpineData.adminAjaxUrl;
            const data = new FormData();
            data.append('action', 'alpine_custom_ajax');
            data.append('name', this.formData.name);
            data.append('password', this.formData.password);
            fetch(ajaxUrl, {
                method: 'POST',
                body: data,
            })
                .then(data => {
                    console.log(data);
                    alert("ok");
                })
                .catch(error => {
                    console.error('Error:', error);
                });
        }
    }
}

 

سوال دومم اینکه چطوری میتونم صفحه بندی که توی صفحه فرانت سایت رو داریم به داشبورد وردپرس اضافه کنم؟ تو حالتی که استاد آموزش دادن استفاده کردن درست صفحه رو نشون نمیده اون page رو میاره قبل از ادرس پنل ادمین اضافه میکنه. راه حلی براش دارین؟ امیدوارم منظورم رو درست رسونده باشم

یعنی اینطوری :

Capture-LJc7.png

خیلی ممنونم

با سلام و وقت بخیر

در ارتباط با مشکل جدا کردن فایلها » کد دومی که ضمیمه کرده اید بسیار عجیب است که داخل کدهای php عملیات رجیتسر اسکریپت را انجام داده اید و بلافاصله کد js قرار گرفته است!

برای اینکه فایل هارا جدا کنید » ابتدا کدهای js خودتان را در یک فایل .js قرار دهید سپس داخل کدهای php با توابع وردپرسی اقدام به لود کردن alpine js و بعد از اون اسکریپت خودتون بکنید.
روشی که در این دوره اموزش برای رجیستر کردن توضیح داده شده است.

https://developer.wordpress.org/reference/functions/wp_register_script/#user-contributed-notes

بهنام مرادی ۲۹ مهر ۱۴۰۲، ۰۶:۵۱

سلام جناب مرادی عزیز وقتتون بخیر، نه فایل‌ها جداست من برای اینکه نشون بدم درست مراحل رجیستر رو انجام دادم کدهارو کنار هم گذاشتم

و دقیقا مثل دوره پیش رفتم ولی نمیتونه فایل رو بخونه و فانکشن رو پیدا کنه.

درمورد صفحه بندی پنل ادمین میتونید کمکم کنید؟

خیلی ممنونم

میثم کیانی ۲۹ مهر ۱۴۰۲، ۰۷:۴۹

با سلام مجدد

برای مشکل رجیستر اسکریپت و عدم اجرای اون بررسی کنید که اسکریپت شما در سند حتما اضافه شده باشد - و بررسی کنید کجای صفحه اضافه شده است - سپس console مرورگر را بررسی کنید که خطایی وجود دارد که مشکل ساز شود.

 

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

بهنام مرادی ۳۰ مهر ۱۴۰۲، ۱۰:۲۸

سلام جناب مرادی عزیز وقتتون بخیر، ببخشید من چند روز دسترسی به اینترنت نداشتم و نمیتونستم پای سیستمم باشم.

درمورد ریجستر کردن فایل‌های alpine خدمتتون عرض کنم که فایل به درستی توی سند ضمیمه شده و قابل دسترس هست ولی متاسفانه فانکشن هایی که توی بدنه html استفاده میکنم رو نمیتونه بشناسه فقط زمانی کار میکنه که کدها کنار هم باشن.

 

درمورد صفحه بندی، من میخوام یک صفحه بندی مثل بخش ادمین ووکامرس داشته باشم که تمام محصولات رو نمایش میدهد و شما میتونید بین صفحاتش حرکت کنید الان که همین کارو میخواهم انجام بدم دوتا مشکل دارم اول به درستی نمیتونه تشخیص بده چندتا صفحه وجود داره، مورد دوم اینکه آدرس URL به درستی نمایش داده نمیشه مثل این مورد :

حالت درست نمایش یه لینک در صفحه بندی ووکامرس (پنل ادمین) 

/wp-admin/edit.php?post_type=product&paged=2

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

/wp-admin/admin.php/page/2/?page=purchase-order

 

با یکم سرچ و تونستم یکم مشکلم رو حل کنم حالا نمیدونم کار درستی هست یا نه این کدیه که من استفاده کردم :

بخش شناسایی page توی url :

$paged = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 1;

بخش صفحه بندی :

$big = 999999999;
			echo paginate_links( array(
				'base'      => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
				'format'    => '?paged=%#%',
				'current'   => max( 1, $paged ),
				'total'     => $products->max_num_pages,
				'prev_text' => '&laquo;',
				'next_text' => '&raquo;',
			) );

 

خیلی ممنونم

 

میثم کیانی ۱۴ آبان ۱۴۰۲، ۰۹:۲۷

با سلام مجدد، متوجه مشکلم شدم، ظاهرا alpine دیگه مثل جی کوئری نیست که حتما باید جی کوئری اول لود بشه بعدش کدهایی که نوشتیم رو قرار بدیم. alpine دقیقا برعکسه یعنی باید اخرین بخش از کدها هسته اصلی alpine رو لود کنیم. من بخش رجیستر رو به این صورت تغییر دادم و مشکلم حل شد :

function add_alpine_js() {
	wp_enqueue_script(
		'ajax-alpine',
		BP_PLUGIN_ASSETS.'js/ajax-alpine.js',
		'',
		'1.0.0',
		[
			'in_footer' => true
		]
	);
	wp_enqueue_script(
		'alpinejs',
		'https://cdn.jsdelivr.net/npm/alpinejs@3.13.1/dist/cdn.min.js',
		'',
		'3.13.1',
		[
			'strategy'  => 'defer',
			'in_footer' => true
		]
	);
	$localized_data = array(
		'adminAjaxUrl' => admin_url('admin-ajax.php'),
	);
	wp_localize_script('ajax-alpine', 'alpineData', $localized_data);
}
add_action( "admin_enqueue_scripts", "add_alpine_js" );

 

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

میثم کیانی ۱۴ آبان ۱۴۰۲، ۱۲:۳۳