در این مقاله روش ساخت متاباکس وردپرس را خواهیم گفت. می توانید این امکان را به صورت مستقیم به قالب خودتون اضافه کنید و یا به صورت افزونه نوشته و با فعال کردن آن متاباکس ها را اضافه کنید. اگر با روش افزونه نویسی آشنا نیستید می تونید سری به مقاله آموزش افزونه نویسی وردپرس سری بزنید. خب حالا شروع می کنیم
متاباکس چیست؟
متاباکس ها در واقع بخش های دلخواهی در نوشته ها و برگه های شما هستند که دارای فیلدهای ویژه ای برای دریافت اطلاعات هستند. برخی متاباکس های پیشفرض وردپرس عبارتند از: تصویر شاخص، دسته ها، انتشار و….
در برخی موارد با افزودن افزونه خاصی مانند 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 نیست
آموزش امروز مدرسه وردپرس هم به پایان رسید.
موفق باشید
سلام. خیلی ممنون بابت آموزش. فقط یه سوال :
چطور میشه برای متن ادیتور اضافه کرد؟ یعنی به جای 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' ) ) );
?>
من کار های بالا رو موبه مو انجام دادم اما هیچ اتفاقی نمیفته متاباکسی اضافه نمیشه به ویرایش برگه یا نوشته.
محمد جان این آموزش تست شده می باشد و مشکلی نداشت. لطفا آموزش را دقیق مطالعه کنید
سلام تو قسمت ساخت متاباکس wpschool_meta_box_output رو حذف کنید و به جای اون نام تابع را قرار دهید.
خیلی از توضیحاتتون ممنونم
من یک همچین متاباکسی در محصولات ( ووکامرس ) درست کرده ام و به خوبی کار میکند فقط نمیدونم چطوری وقتی کسی اون محصول را میبینه ، موارد ذخیره شده نمایش داده بشه ؟
ممنون
سلام دوست عزیز. برای نمایش محتوای متاباکس میتونید از کد زیر استفاده کنید
get_post_meta( get_the_ID(), ‘id’, true )
در قسمت id نام فیلد را بگذارید
نام فیلد یا آی دی فیلد؟
id field
ممنون از آموزش خوبتون
اما وقتی من این کارارو انجام میدم
متاباکس افزونه های دیگه ام باز نمیشه
مثلا متاباکس یواست سئو دیگه باز نمیشه
سلام دوست عزیز. معمولا مشکلی پیش نمیاد با این آموزش. متاباکس خودتون رو توی این سایت بسازید: https://jeremyhixon.com/tool/wordpress-meta-box-generator/
اگر باز هم مشکل پیش آمد به wpschool1@gmail.com ایمیل بزنید
سلام من از اون لینکی که فرمودین ساختم متا باکسم رو و پایینش نوشته بود Usage: __get_meta( ‘__playlink’ ) و من داخل صفحه single.php این کد رو قرار دادم. ولی هیچی نشون نمیده.
اموزش خوب میزارید اما لطفا وقتی اموزش میزارید کامل توضیح بدید الان نگفتید تابع get_post_meta stripslashes_deep چیه وقتی این اموزش میزارید در نظر بگیرید ک طرف ممکنه اینارو ندونه و توضیح کاملی بزارید
با سلام و احترام
بنده اگر بخوام متاباکسم فقط در یک custom-post-type نمایش داده بشه باید چیکار کنم؟
ممنونم
بسم الله الرحمن الرحیم
سلام علیکم
کافی است در این تابع
add_meta_box
به عنوان ورودی چهارم نام پست تایپ خودتان را بنویسید.
کانال تلگرام
عضویت در کانال
سایر مقالات
ورود به مدرسه وردپرس
عضویت در مدرسه وردپرس