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

متاباکس چیست؟

متاباکس ها در واقع بخش های دلخواهی در نوشته ها و برگه های شما هستند که دارای فیلدهای ویژه ای برای دریافت اطلاعات هستند. برخی متاباکس های پیشفرض وردپرس عبارتند از: تصویر شاخص، دسته ها، انتشار و….

در برخی موارد با افزودن افزونه خاصی مانند yoast wordpress seo ، در صفحه افزودن نوشته و برگه متاباکس جدیدی اضافه می کند و یا با فعال کردن تصویر شاخص در سایت وردپرسی، متاباکس تصویر شاخص اضافه خواهد شد.

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

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

در این صورت می توانید از متاباکس وردپرس استفاده کنید.

ساخت متاباکس وردپرس

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

// تابعی برای برگرداندن مقادیر فیلد ها
function wpshool_get_custom_field( $value ) {
    global $post;

    $custom_field = get_post_meta( $post->ID, $value, true );
    if ( !empty( $custom_field ) )
        return is_array( $custom_field ) ? stripslashes_deep( $custom_field ) : stripslashes( wp_kses_decode_entities( $custom_field ) );

    return false;
}

قدم بعدی در انجام کار، ساخت متاباکس وردپرس می باشد. با قرار دادن کد زیر متاباکسی به نام ” نمونه متاباکس مدرسه وردپرس” به صفحه نوشته و برگه اضافه خواهد شد. البته شما می توانید نام آن را هم تغییر دهید. کد زیر را داخل فایل functions.php قالب خودتون اضافه کنید

// ساخت متاباکس
function wpschool_add_custom_meta_box() {
	add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'post', 'normal', 'high' );  // متاباکس صفحه نوشته
	add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'page', 'normal', 'high' );  // متاباکس صفحه برگه
}
add_action( 'add_meta_boxes', 'wpschool_add_custom_meta_box' );

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

متاباکس در وردپرس

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

// فیلدهای متاباکس
function wpschool_meta_box_output( $post ) {
	// ساخت فیلدها
	wp_nonce_field( 'my_wpschool_meta_box_nonce', 'wpschool_meta_box_nonce' ); ?>

	<p>
		<label for="wpschool_textfield"><?php _e( 'عنوان', 'textdomain' ); ?>:</label>
		<input type="text" name="wpschool_textfield" id="wpschool_textfield" value="<?php echo wpschool_get_custom_field( 'wpschool_textfield' ); ?>" size="50" />
    </p>

	<p>
		<label for="wpschool_textarea"><?php _e( 'متن', 'textdomain' ); ?>:</label><br />
		<textarea name="wpschool_textarea" id="wpschool_textarea" cols="60" rows="4"><?php echo wpschool_get_custom_field( 'wpschool_textarea' ); ?></textarea>
    </p>

	<?php
}

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

تعریف فیلدهای متاباکس در وردپرس

در قدم آخر، نوبت به این رسیده که این مقادیر وارد شده متاباکس ذخیره شوند. پس با کد زیر این امکان را هم فراهم می کنیم:

// ذخیره مقادیر فیلد ها
function wpschool_meta_box_save( $post_id ) {
	// جلوگیری از اجرای اسکریپت زمانی که در حال ذخیره خودکار است
	if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

	// بررسی فعلی متاباکس
	if( !isset( $_POST['wpschool_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['wpschool_meta_box_nonce'], 'my_wpschool_meta_box_nonce' ) ) return;

	// جلوگیری از اجرای اسکریپت زمانی که کاربر اجازه ویرایش ندارد
	if( !current_user_can( 'edit_post' ) ) return;

    // ذخیره فیلد عنوان
	if( isset( $_POST['wpschool_textfield'] ) )
		update_post_meta( $post_id, 'wpschool_textfield', esc_attr( $_POST['wpschool_textfield'] ) );

    // ذخیره فیلد متن
	if( isset( $_POST['wpschool_textarea'] ) )
		update_post_meta( $post_id, 'wpschool_textarea', esc_attr( $_POST['wpschool_textarea'] ) );
}
add_action( 'save_post', 'wpschool_meta_box_save' );

با کد های بالا، متاباکس فقط در صفحه نوشته و برگه اضافه می شوند. اما اگر شما post type دیگری دارید و می خواهید متاباکس ها در آنجا هم نمایش داده شود کافیست مانند کد زیر عمل کنید:

add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'نام post type', 'normal', 'high' );

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

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

کد زیر جایگاه متاباکس را معرفی می کند:

// این متاباکس در صفحه نوشته و زیر ادیتور قبل از بقیه متاباکس ها قرار می گیرد.
add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'post', 'normal', 'high' );
// این متاباکس در صفحه نوشته و زیر ادیتور آخر از بقیه متاباکس ها قرار می گیرد.
add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'post', 'normal', '' );
// این متاباکس در صفحه نوشته و سایدبار چپ قبل از بقیه متاباکس ها قرار می گیرد.
add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'post', 'side', 'high' );
// این متاباکس در صفحه نوشته و سایدبار چپ آخر از بقیه متاباکس ها قرار می گیرد.
add_meta_box( 'wpschool-meta-box', __( 'نمونه متاباکس مدرسه وردپرس', 'textdomain' ), 'wpschool_meta_box_output', 'post', 'side', '' );

نکته: کد بالا فقط برای معرفی جایگاه متاباکس قرار داده شده و نیازی به درج آن در فایل function.php نیست

آموزش امروز مدرسه وردپرس هم به پایان رسید.

موفق باشید

15 دیدگاه برای “ساخت متاباکس وردپرس

  • هومن
    - ۱ خرداد , ۱۳۹۳

    سلام. خیلی ممنون بابت آموزش. فقط یه سوال :
    چطور میشه برای متن ادیتور اضافه کرد؟ یعنی به جای textarea خالی ادیتور باشه؟
    ممنون

    • الناز بیک زاده
      - ۱ خرداد , ۱۳۹۳

      سلام هومن جان
      از تابع زیر استفاده کنید

      'content', 'media_buttons' => false, 'tinymce' => array( 'theme_advanced_buttons1' => 'formatselect,forecolor,|,bold,italic,underline,|,bullist,numlist,blockquote,|,justifyleft,justifycenter,justifyright,justifyfull,|,link,unlink,|,spellchecker,wp_fullscreen,wp_adv' ) ) );
      ?>

  • محمد
    - ۲۱ خرداد , ۱۳۹۳

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

    • الناز بیک زاده
      - ۳۱ خرداد , ۱۳۹۳

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

  • milad
    - ۷ بهمن , ۱۳۹۳

    سلام تو قسمت ساخت متاباکس wpschool_meta_box_output رو حذف کنید و به جای اون نام تابع را قرار دهید.

  • فرشید
    - ۲۴ بهمن , ۱۳۹۳

    خیلی از توضیحاتتون ممنونم
    من یک همچین متاباکسی در محصولات ( ووکامرس ) درست کرده ام و به خوبی کار میکند فقط نمیدونم چطوری وقتی کسی اون محصول را میبینه ، موارد ذخیره شده نمایش داده بشه ؟
    ممنون

    • الناز بیک زاده
      - ۲۵ بهمن , ۱۳۹۳

      سلام دوست عزیز. برای نمایش محتوای متاباکس میتونید از کد زیر استفاده کنید
      get_post_meta( get_the_ID(), ‘id’, true )

      در قسمت id نام فیلد را بگذارید

  • dwgir
    - ۲۸ آبان , ۱۳۹۵

    نام فیلد یا آی دی فیلد؟

    • الناز
      - ۲۹ آبان , ۱۳۹۵

      id field

  • مجید
    - ۱۹ اردیبهشت , ۱۳۹۷

    ممنون از آموزش خوبتون
    اما وقتی من این کارارو انجام میدم
    متاباکس افزونه های دیگه ام باز نمیشه
    مثلا متاباکس یواست سئو دیگه باز نمیشه

  • امید
    - ۲۸ فروردین , ۱۳۹۸

    سلام من از اون لینکی که فرمودین ساختم متا باکسم رو و پایینش نوشته بود Usage: __get_meta( ‘__playlink’ ) و من داخل صفحه single.php این کد رو قرار دادم. ولی هیچی نشون نمیده.

  • kem
    - ۶ شهریور , ۱۳۹۸

    اموزش خوب میزارید اما لطفا وقتی اموزش میزارید کامل توضیح بدید الان نگفتید تابع get_post_meta stripslashes_deep چیه وقتی این اموزش میزارید در نظر بگیرید ک طرف ممکنه اینارو ندونه و توضیح کاملی بزارید

  • مهدی
    - ۱ اسفند , ۱۳۹۸

    با سلام و احترام
    بنده اگر بخوام متاباکسم فقط در یک custom-post-type نمایش داده بشه باید چیکار کنم؟
    ممنونم

  • گمنام
    - ۲۸ تیر , ۱۴۰۰

    بسم الله الرحمن الرحیم
    سلام علیکم
    کافی است در این تابع
    add_meta_box
    به عنوان ورودی چهارم نام پست تایپ خودتان را بنویسید.

دیدگاه خود را بیان کنید

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

-- بارگیری کد امنیتی --