چطوری میشه

ایجاد پست ها و صفحات وردپرس با استفاده از PHP – آموزش 101

ایجاد پست ها و صفحات وردپرس با استفاده از PHP – آموزش 101

بدون شک شما مضامین و افزونه‌های وردپرس را دیده‌اید که ادعا می‌کنند هنگام نصب به‌طور خودکار «داده‌های ساختگی» را برای شما نصب می‌کنند تا بلافاصله یک وب‌سایت کاملاً کارآمد داشته باشید. . من قصد دارم روشی را برای دستیابی به این هدف با استفاده از توابع PHP به شما نشان دهم.

این می تواند مفید باشد اگر:

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

در این آموزش ما یک تابع ساده مبتدی برای دستیابی به یک راه حل کاری “سریع و کثیف” ایجاد می کنیم. بعداً در یک آموزش دیگر، یاد می‌گیریم که چگونه آنچه را که در اینجا یاد گرفته‌ایم گسترش دهیم تا یک سیستم ارسال پست قوی و آسان برای استفاده ایجاد کنیم.

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

if ( ! function_exists( 'PostCreator' ) ) {

	تابع PostCreator(
		$name = 'پست خودکار'،
		$type = 'پست'،
		$content = 'محتوای ساختگی'،
		$category = آرایه (1،2)،
		$template = NULL،
		$author_id = '1'،
		$status = 'انتشار'
	) {

		define( POST_NAME, $name );
		define( POST_TYPE, $type );
		define( POST_CONTENT, $content );
		define( POST_CATEGORY, $category );
		define(POST_TEMPLATE, '' );
		define( POST_AUTH_ID, $author_id );
		define( POST_STATUS, $status );

		if ( $type == 'page' ) {
			$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
			$post_id = $post->ID;
			$post_data = get_page( $post_id );
			define( POST_TEMPLATE, $template );
		}دیگر {
			$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
			$post_id = $post->ID;
			$post_data = get_post( $post_id );
		}

		تابع hbt_create_post() {
			$post_data = آرایه(
				'post_title' => wp_strip_all_tags( POST_NAME)،
				'post_content' => POST_CONTENT،
				'post_status' => POST_STATUS،
				'post_type' => POST_TYPE،
				'post_author' => POST_AUTH_ID،
				'post_category' => POST_CATEGORY،
				'page_template' => POST_TEMPLATE
			)
			wp_insert_post($post_data, $error_obj );
		}

		if ( ! isset( $post ) ) {
			add_action('admin_init', 'hbt_create_post');
			بازگشت $error_obj;
		}

	}
}

/* همه گزینه های موجود برای PostCreator()

PostCreator( 'عنوان' , 'نوع پست' , 'محتوای پست' , 'دسته پست' , 'نام فایل الگو' , 'شماره شناسه نویسنده' , 'وضعیت پست');

TITLE - HTML حذف شد. رشته ساده
POST TYPE - نوع پست راب. به عنوان مثال "پست" یا "صفحه". انواع پست سفارشی پشتیبانی می شوند.
محتوای پست - محتوای پست/صفحه. HTML مجاز است.
رده پست - آرایه ای از شناسه های عدد صحیح دسته/دسته هایی که می خواهید به پست خود پیوند دهید
TEMPLATE FILE NAME - نام فایل الگو. فقط برای صفحات در قالب 'file_name.php'.
AUTHOR ID NUMBER - مقدار صحیح. پیش فرض 1 است.
وضعیت پست - گزینه های موجود. [ 'پیش نویس' | 'انتشار' | "در انتظار"| "آینده" | "خصوصی" | وضعیت ثبت سفارشی ]

در صورت موفقیت آمیز بودن، PostCreator() چیزی را بر نمی گرداند.
اگر خطایی وجود داشته باشد PostCreator() یک شی WP_error را برمی گرداند.

*/

PostCreator('My Lorem Ipsum', 'page', 'با تعداد قابل توجهی از Dolor. این با استفاده از تابع PostCreator's Harri Bell-Thomas ایجاد شد.' );

راهنمای گام به گام

ما یک تابع PHP به نام PostCreator() ایجاد خواهیم کرد و برای گرفتن پارامترهای خاصی به آن نیاز داریم. به هر پارامتر یک پیش‌فرض داده شده است، بنابراین از نظر فنی هنگام فراخوانی تابع، نیازی به تعیین هیچ‌کدام از آنها ندارید، اما خب، لذت این کار کجاست؟

function PostCreator(

	$name = 'پست خودکار'،
	$type = 'پست'،
	$content = 'محتوای ساختگی'،
	$category = آرایه (1،2)،
	$template = NULL،
	$author_id = '1'،
	$status = 'انتشار'
) {

	// خروجی تابع در اینجا

}

در ادامه می‌خواهم چند ثابت را تعریف کنم که برای تابع تعبیه‌شده زیر ضروری است. (این را می‌توان دوباره نوشت تا از ثابت‌ها استفاده نشود، اما من از آنها استفاده کرده‌ام زیرا به نظرم هنگام گسترش تابع اصلی PostCreator() مفید هستند، اما این یک داستان برای آموزش دیگری است.

define( POST_NAME, $name );
define( POST_TYPE, $type );
define( POST_CONTENT, $content );
define( POST_CATEGORY, $category );
define(POST_TEMPLATE, '' );
define( POST_AUTH_ID, $author_id );
define( POST_STATUS, $status );

خوب، تا اینجا خیلی خوب است. اکنون، برای جلوگیری از ایجاد پست‌ها/صفحات تکراری (که یک کابوس است، به من اعتماد کنید!) اعتبار سنجی اضافه کرده‌ام. این اعتبار سنجی بررسی می کند که آیا پست/صفحه ای با همین نام از قبل وجود داشته است یا خیر. اگر این کار را کرد، یک مورد جدید ایجاد نمی کند، اما اگر این کار را نکرد، آن را برای شما ایجاد می کند.

دلیل اینکه چرا عنوان پست را بررسی کردم این است که وردپرس برای ایجاد یک صفحه به این نیاز است (بقیه به طور خودکار ایجاد می شود). راه‌های دیگر انجام این اعتبارسنجی عبارتند از بررسی در برابر «Slugs» یا شناسه‌های پست. در آموزش بعدی به همه این موارد خواهیم پرداخت.

این به ویژه در صورتی مفید است که پست/صفحه توسط افزونه یا موضوع شما مورد نیاز باشد. من ابتدا این را برای یکی از پلاگین های خود توسعه دادم زیرا نیاز به یک صفحه با یک قالب صفحه خاص داشت. با استفاده از این تابع، من به سادگی PostCreator() را وردپرس admin_init نگه داشتم، به این معنی که اگر کسی بخواهد آن را حذف کند (چقدر جرأت دارد!) بلافاصله دوباره ایجاد می شود تا از مشکلاتی با بقیه افزونه جلوگیری شود.< /p>

به خاطر داشته باشید که هیچ‌کس نمی‌خواهد وبلاگش ربوده شود، بنابراین مطمئن شوید که به وضوح به آنها بگویید چه اتفاقی دارد می‌افتد و شاید گزینه‌ای برای خاموش کردن آن برای آنها فراهم کنید.

اکنون به اعتبارسنجی بازگردید. این بیت کد بعدی است.

if ( $type == 'page' ) {
	$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
	$post_id = $post->ID;
	$post_data = get_page( $post_id );
	define( POST_TEMPLATE, $template );
}دیگر {
	$post = get_page_by_title( POST_NAME, 'OBJECT', $type );
	$post_id = $post->ID;
	$post_data = get_post( $post_id );
}

پس اینجا چه خبر است؟

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

در خط اول عبارت IF (اگر قبلاً نمی دانستید نام فنی آن ‘apodosis’ است) متغیر $post تعریف شده است. اگر پست/صفحه‌ای با همان نامی وجود داشته باشد که می‌خواهید ایجاد شود، پس $post با داده‌های ورودی موجود پر می‌شود (به عنوان یک شی، نه یک آرایه، اما در صورت لزوم می‌توان آن را تغییر داد). این متغیر برای آزمایش اینکه آیا عنوان شما منحصر به فرد است یا خیر استفاده می شود. دو خط بعدی را اضافه کرده‌ام، زیرا اگر می‌خواهید این تابع را گسترش دهید، باز هم بسیار مفید هستند. نمونه‌ای از این می‌تواند به‌روزرسانی پست موجود در صورت وجود آن باشد.

Next  تابع تودرتوی ما است که به قلاب «admin_head» اضافه می‌شود. اینجاست؛

function hbt_create_post() {
	$post_data = آرایه(
		'post_title' => wp_strip_all_tags( POST_NAME)،
		'post_content' => POST_CONTENT،
		'post_status' => POST_STATUS،
		'post_type' => POST_TYPE،
		'post_author' => POST_AUTH_ID،
		'post_category' => POST_CATEGORY،
		'page_template' => POST_TEMPLATE
	)
	wp_insert_post($post_data, $error_obj );
}

به سادگی، این از تابع داخلی وردپرس (wp_insert_post) برای ایجاد پست/صفحه ما استفاده می کند. ما $post_data را با آرایه‌ای از پارامترهای خود پر می‌کنیم (شما می‌توانید ثابت‌های در حال استفاده ما را در اینجا ببینید). این ایجاد می شود و اگر خطایی وجود داشته باشد، مقدار بولی $error_obj ایجاد می کند. درست = یک مشکل. FALSE = همه چیز خوب است. آخرین کاری که باید انجام دهید این است که تابع قبلی را روی سر مدیر اجرا کنید، اما فقط در صورتی که اعتبارسنجی را پشت سر بگذارد، و شی خطا را برگردانید.

if ( ! isset( $post ) ) {
	add_action('admin_init', 'hbt_create_post');
	بازگشت $error_obj;
}

عالی! اکنون ما عملکرد عالی خود را ایجاد کرده ایم، اجازه دهید از آن استفاده کنیم!

استفاده

به سادگی تابع PostCreator()  را ​​اضافه کرده و اجرا کنید.

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

PostCreator(
	'عنوان'،
	"نوع پست"،
	"پست محتوا"،
	'دسته بندی پست'،
	"نام فایل الگو"،
	"شماره شناسه نویسنده"،
	"وضعیت پست"
);

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

PostCreator( 'Alex's Post' );

پارامتر TITLE یک مقدار رشته را می پذیرد. این از تگ های HTML پاک شده است.

پارامتر POST TYPE برای مثال، اسلاگ نوع پست را می پذیرد. “پست” یا “صفحه”. انواع پست سفارشی پشتیبانی می شوند.

PostCreator( 'Alex's Post', 'page' );

POST CONTENT یک مقدار رشته را می پذیرد. این محتوای پست/صفحه ایجاد شده خواهد بود. HTML در اینجا مجاز است.

PostCreator( 'پست الکس'، 'صفحه'، 'زور با این یکی قوی است...' );

POST CATEGORY آرایه ای از اعداد صحیح را می پذیرد. اعداد صحیح با شناسه دسته/دسته های منتسب به پست/صفحه مطابقت دارند.

PostCreator( 'پست الکس'، 'صفحه' , 'نیرو با این یکی قوی است...' , array( 1, 2 ) );

نام فایل TEMPLATE یک مقدار رشته ای است که الگوی صفحه مورد نظر صفحه جدید شما را تعیین می کند. این فقط برای صفحات کار می کند. قالب این خواهد بود؛ “file_name.php”.

PostCreator(
	'پست الکس'،
	صفحه'،
	'نیروی قوی با این یکی است…'،
	آرایه (1، 2)،
	'fullwidth_page.php'
);

شماره AUTHOR ID یک مقدار صحیح شناسه نویسنده است.

PostCreator(
	'پست الکس'،
	"صفحه"،
	'نیروی قوی با این یکی است…'،
	آرایه (1، 2)،
	'fullwidth_page.php'،
	'1'
);

وضعیت POST به شما امکان می دهد وضعیت پست/صفحه ایجاد شده را تعریف کنید. به طور پیش فرض “منتشر شده” است.

گزینه های موجود؛ [ “پیش نویس” | “انتشار” | “در انتظار”| “آینده” | “خصوصی” | وضعیت ثبت سفارشی ]

PostCreator(
	'پست الکس'،
	"صفحه"،
	'نیروی قوی با این یکی است…'،
	آرایه (1، 2)،
	'fullwidth_page.php'،
	'1'،
	'انتشار'
);

در حال تکمیل

WordPress یک ابزار فوق العاده قدرتمند است، اما قطعاً گاهی اوقات می تواند سرکش باشد. امیدوارم این قطعه ساده برای شما مفید باشد، شاید در این راه یکی دو مورد را یاد بگیرید. منتظر مورد بعدی باشید که در آن می‌خواهم کارهایی را که قبلاً در این مقاله انجام داده‌ایم به کلاس PHP تبدیل کنم و عملکرد و ثبات بیشتری را اضافه کنم. برای پیش‌نمایش مخفیانه، کد را در Github بررسی کنید: PostController

اگر سؤالی دارید، فقط در بخش نظرات زیر بپرسید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا