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

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

فیلم آموزش افزونه نویسی وردپرس

 

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

برای اینکه بتوانید یک افزونه بنویسید نیاز دارید که با اصول افزونه نویسی و زبان PHP آشنا باشید

نام ها، فایل ها و موقعیت ها

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

فایل افزونه: قدم دوم در افزونه نویسی ساخت فایل PHP اصلی افزونه می باشد. برای مثال اگر قرار باشد نام افزونه شما  WpSlider باشد نام فایل شما WpSlider.php خواهد بود.

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

فایل ReadMe.txt

این فایل زمانی به درد شما خواهد خورد که بخواهید افزونه خود را در سایت wordpress.org به ثبت برسانید. این فایل می بایست شامل توضیحات استاندارد درباره افزونه باشد

در سایت wordpress.org یک نمونه فایل readme.txt استاندارد قرار دارد. برای مشاهده نمونه فایل readme.txt کلیک کنید

 

گواهینامه

درج گواهینامه برای افزونه ها امری عادی و معمول برای تمامی افزونه نویسان است. بیشتر افزونه ها از گواهینامه  GPL2  یا  compatible with the GPL2 استفاده می کنند.

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

<?php
/*  Copyright YEAR  PLUGIN_AUTHOR_NAME  (email : ایمیل نویسنده افزونه)

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License, version 2, as 
    published by the Free Software Foundation.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

 

 

نحوه بروزرسانی افزونه

این بخش از توضیحات یکی از مهم ترین قدم های افزونه نویسی وردپرس می باشد. برای دریافت جزئیات بیشتر Subversion را ببینید.

با فرض اینکه شما افزونه خود را در wordpress.org ثبت نموده اید، در طول مدت کار با افزونه پی به داشتن باگ بردید و یا اصلا می خواهید ویژگی جدیدی به افزونه اضافه کنید یا از آن کم کنید. برای اینکار نیاز است که شما افزونه خود را بروزرسانی کنید

قبل از بروزرسانی باید به نکات زیر توجه داشته باشید:

  • مطمئن شوید که افزونه به خوبی کار میکند و مشکلی ندارد، توجه داشته باشید که افزونه جدید در تمامی نسخه های وردپرس بدون مشکل اجرا خواهد شد.
  • شماره نسخه را در بخش اطلاعات افزونه تغییر داده و شماره نسخه جدید را وارد نمایید.
  • شماره نسخه را در بخش اطلاعات افزونه موجود در فایل readme.txt تغییر داده و شماره نسخه جدید را وارد نمایید.
  • در توضیح کوتاهی قید کنید که نسخه جدید افزونه نسبت به نسخه قبلی چه تغییراتی داشته است.
  • یک تگ جدید SVN که شامل این نکات باشد بسازید
  • تغییرات را اعمل کنید

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

برای شروع در فولدر plugins وردپرس خود یک فولدر به نام wpschool-plugin ایجاد کنید. فولدر را باز کرده و یک فایل php به نام wpschool-plugin.php ایجاد کنید و فایل را در حالت ادیت باز کنید و کد زیر را داخل آن قرار دهید:

<?php
/**
 * Plugin Name: افزونه آموزشی مدرسه وردپرس
 * Plugin URI: http://wpschool.ir
 * Description: این افزونه در جهت آموزش در مدرسه وردپرس ساخته شده است.
 * Version: 0.1
 * Author: مدرسه وردپرس
 * Author URI: http://wpschool.ir
 */

کدهای بالا برای معرفی افزونه به وردپرس به کار می رود. اگر شما به بخش افزونه ها بروید، افزونه ای به نام “افزونه آموزشی مدرسه وردپرس” خواهید دید که غیرفعال است. زمانی که افزونه رو فعال کنید هیچ اتفاقی نمی افته چرا که هنوز کدی برش قرار ندادیم.

در این آموزش میخواهیم افزونه ای بسازیم که زمانی که فعال میشه یک post type به نام “نمونه کارها” به همراه دسته بندی و متاباکس اضافه بشه.

حالا در ادامه آموزش افزونه نویسی وردپرس ، فایل wpschool-plugin.php رو مجدد باز کنید و در ادامه کد، کدهای زیر را قرار دهید:

/*** Post Type ***/
add_action( 'init', 'codex_portfolio_init' );
function codex_portfolio_init() {
	$labels = array(
		'name'               => _x( 'نمونه کارها', 'textdomain' ),
		'singular_name'      => _x( 'نمونه کار', 'textdomain' ),
		'menu_name'          => _x( 'نمونه کارها', 'textdomain' ),
		'name_admin_bar'     => _x( 'نمونه کار', 'textdomain' ),
		'add_new'            => _x( 'افزودن جدید', 'textdomain' ),
		'add_new_item'       => __( 'افزودن نمونه کار جدید', 'textdomain' ),
		'new_item'           => __( 'نمونه کار جدید', 'textdomain' ),
		'edit_item'          => __( 'ویرایش نمونه کار', 'textdomain' ),
		'view_item'          => __( 'مشاهده نمونه کار', 'textdomain' ),
		'all_items'          => __( 'همه نمونه کارها', 'textdomain' ),
		'search_items'       => __( 'جستجو نمونه کارها', 'textdomain' ),
		'parent_item_colon'  => __( 'نمونه کار مادر:', 'textdomain' ),
		'not_found'          => __( 'نمونه کاری پیدا نشد', 'textdomain' ),
		'not_found_in_trash' => __( 'نمونه کاری در زباله دان پیدا نشد', 'textdomain' )
	);

	$args = array(
		'labels'             => $labels,
		'public'             => true,
		'publicly_queryable' => true,
		'show_ui'            => true,
		'show_in_menu'       => true,
		'query_var'          => true,
		'rewrite'            => array( 'slug' => 'portfolio' ),
		'capability_type'    => 'post',
		'has_archive'        => true,
		'hierarchical'       => false,
		'menu_position'      => null,
		'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
	);

	register_post_type( 'portfolio', $args );
}



/*** Taxonomy ***/
add_action( 'init', 'create_taxonomy_taxonomies', 0 );
function create_taxonomy_taxonomies() {
	$labels = array(
		'name'              => _x( 'دسته بندی', 'taxonomy general name', 'textdomain' ),
		'singular_name'     => _x( 'دسته بندی', 'taxonomy singular name', 'textdomain' ),
		'search_items'      => __( 'جستجو دسته بندی', 'textdomain' ),
		'all_items'         => __( 'همه دسته بندی ها', 'textdomain' ),
		'parent_item'       => __( 'دسته بندی مادر', 'textdomain' ),
		'parent_item_colon' => __( 'دسته بندی مادر:', 'textdomain' ),
		'edit_item'         => __( 'ویرایش دسته بندی', 'textdomain' ),
		'update_item'       => __( 'بروزرسانی دسته بندی', 'textdomain' ),
		'add_new_item'      => __( 'افزودن دسته بندی', 'textdomain' ),
		'new_item_name'     => __( 'نام دسته بندی جدید', 'textdomain' ),
		'menu_name'         => __( 'دسته بندی', 'textdomain' ),
	);
	$args = array(
		'hierarchical'      => true,
		'labels'            => $labels,
		'show_ui'           => true,
		'show_admin_column' => true,
		'query_var'         => true,
		'rewrite'           => array( 'slug' => 'portfolio-cat' ),
	);
	register_taxonomy( 'portfolio-cat', array( 'portfolio' ), $args );
}




/*** Meta Box ***/
function portfolio_meta_get_meta( $value ) {
	global $post;

	$field = get_post_meta( $post->ID, $value, true );
	if ( ! empty( $field ) ) {
		return is_array( $field ) ? stripslashes_deep( $field ) : stripslashes( wp_kses_decode_entities( $field ) );
	} else {
		return false;
	}
}

function portfolio_meta_add_meta_box() {
	add_meta_box(
		'portfolio_meta-portfolio-meta',
		__( 'اطلاعات نمونه کار', 'portfolio_meta' ),
		'portfolio_meta_html',
		'portfolio',
		'normal',
		'high'
	);
}
add_action( 'add_meta_boxes', 'portfolio_meta_add_meta_box' );

function portfolio_meta_html( $post) {
	wp_nonce_field( '_portfolio_meta_nonce', 'portfolio_meta_nonce' ); ?>

	<p>
		<label for="portfolio_meta_demo_link"><?php _e( 'لینک پروژه', 'portfolio_meta' ); ?></label><br>
		<input type="text" name="portfolio_meta_demo_link" id="portfolio_meta_demo_link" value="<?php echo portfolio_meta_get_meta( 'portfolio_meta_demo_link' ); ?>">
	</p>	<p>
		<label for="portfolio_meta_customer"><?php _e( 'نام مشتری', 'portfolio_meta' ); ?></label><br>
		<input type="text" name="portfolio_meta_customer" id="portfolio_meta_customer" value="<?php echo portfolio_meta_get_meta( 'portfolio_meta_customer' ); ?>">
	</p><?php
}

function portfolio_meta_save( $post_id ) {
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
	if ( ! isset( $_POST['portfolio_meta_nonce'] ) || ! wp_verify_nonce( $_POST['portfolio_meta_nonce'], '_portfolio_meta_nonce' ) ) return;
	if ( ! current_user_can( 'edit_post', $post_id ) ) return;

	if ( isset( $_POST['portfolio_meta_demo_link'] ) )
		update_post_meta( $post_id, 'portfolio_meta_demo_link', esc_attr( $_POST['portfolio_meta_demo_link'] ) );
	if ( isset( $_POST['portfolio_meta_customer'] ) )
		update_post_meta( $post_id, 'portfolio_meta_customer', esc_attr( $_POST['portfolio_meta_customer'] ) );
}
add_action( 'save_post', 'portfolio_meta_save' );

/*
	Usage: portfolio_meta_get_meta( 'portfolio_meta_demo_link' )
	Usage: portfolio_meta_get_meta( 'portfolio_meta_customer' )
*/

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

آموزش ساخت post type در وردپرس

آموزش ساخت متاباکس وردپرس

بعد فایل را ذخیره کنید و به بخش افزونه ها رفته و افزونه ای که ساختیم رو فعال کنید. میبینید که post type نمونه کارها به پنل اضافه شد. حالا اگر شما هر امکان دیگری را خواستید به سایت اضافه کنید به این شکل عمل می کنید

نکته

برای فراخوانی فایل های css و js و … نمیتوان از get_template_directory_uri() استفاده کرد بلکه باید از plugin_dir_url( $file ) استفاده کرد. برای مثال:

function wpschoolplugin_scripts() {
    wp_register_style( 'foo-styles',  plugin_dir_url( __FILE__ ) . 'assets/foo-styles.css' );
    wp_enqueue_style( 'foo-styles' );
}
add_action( 'wp_enqueue_scripts', 'wpschoolplugin_scripts' );

جهت اطلاعات بیشتر

  • کدنویسی افزونه شما می بایست مطابق الگوریتم WordPress Coding Standards باشد
  • نام توابع استفاده شده در افزونه نباید همنام دیگر توابع وردپرس و افزونه ها باشد
  • سعی نکنید به طور مستقیم از <script> و یا <style> استفاده کنید. برای استفاده لطفا فایل ها را فراخوان کنید
  • خطاهای PHP را در افزونه خود رفع نمایید. برای اینکار می توانید کد define(‘WP_DEBUG’, true); را به فایل wp-config.php خود اضافه کنید تا بتوانید خطاهای وردپرس را ببینید.
  • و جهت مشاهده آموزش طراحی قالب وردپرس همراه ما باشید.

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

موفق و پایدار باشید

 

17 دیدگاه برای “آموزش افزونه نویسی وردپرس + فیلم آموزشی

  • علی
    - ۱۲ شهریور , ۱۳۹۳

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

  • اکبر قره باغی
    - ۱ دی , ۱۳۹۳

    بسیار ممنون

    مفید بود

  • حسین
    - ۱۳ مرداد , ۱۳۹۴

    سلام میخواستم بدونم کدها رو با چه پلاگینی نوشتی

    • الناز
      - ۱۸ مرداد , ۱۳۹۴

      سلام. کدوم کد ها؟

  • جواد
    - ۴ شهریور , ۱۳۹۴

    سلام برای پلاگین نوشتن الزامل باید از PHP استفاده کرد ؟

    • ارسطو عباسی
      - ۲۵ مهر , ۱۳۹۴

      بله

  • طراحی سایت
    - ۲ دی , ۱۳۹۴

    عالی بود ممنون

  • sadegh
    - ۱۰ بهمن , ۱۳۹۴

    با سلام و تشکر از آموزش های خوبتون
    پیشنهاد میکنم در کنار این آموزش ها این دوره رو حتما ببینید خیلی خوبه
    http://goo.gl/3mKqyh

    • الناز
      - ۳ اسفند , ۱۳۹۴

      متشکر حتما بررسی می کنم

  • بازی اندروید
    - ۱۰ خرداد , ۱۳۹۶

    خسته نباشید ممنون به خاطر این مطالب زیبا

  • طراحی سایت
    - ۳۰ مرداد , ۱۳۹۶

    خیلی ساده و جامع بود . احسنت

  • سید محسن
    - ۳۰ اردیبهشت , ۱۳۹۷

    سلام
    می خواستم بدونم تامیین امنیت کد های افزونه در وردپرس چگونه است ؟ و ما چطور می تونیم کدهای افزونه را از کپی کردن و دزدیده شدن حفظ کنیم
    باتشکر

    • سیروس
      - ۳۱ اردیبهشت , ۱۳۹۷

      با سلام و خسته نباشید،
      وردپرس تحت لایسنس GPL ارائه شده و طبق اون تمام کدها Open Source بوده و در دسترس همه قرار داره و شما نمی تونید کدها رو انکریپت کرده یا به هر روشی از دید کاربر مخفی کنید.
      راهی که برخی از توسعه دهنده ها پیشنهاد می کنند ، استفاده از API هستش ، که بر طبق اون شما جهت تاییدیه گرفتن به وب سرویس سرور خودتون وصل میشید و بعد به کاربر اجازه میدید از پلاگین استفاده کنه ، که تو این روش هم کدها باز در دسترس کاربر هستش.
      معمولا برای اینکه پلاگین شما خریدار داشته باشه باید خدمات جانبی مثل بروزرسانی و پشتیبانی خوب ارائه بدید و کاربرا رو تشویق کنید برای داشتن این امکانات افزونه شما رو خریداری کنند.
      البته لایسنس GPL فقط شامل کدهای PHP میشه و شما می تونید کدهای CSS , JS رو به هر روشی که دوست دارید تغییر بدید.
      موفق باشید.

  • کیمیا قاسمی
    - ۲۷ آذر , ۱۳۹۷

    سلام. خسته نباشید.
    خوشحالم که با شما و آموزش خوبتون آشنا شدم.
    من یک سایت وردپرسی کاربردی و با امکانات زیاد میخام پیاده سازی بکنم.
    یک اپلیکیشن مبتنی بر وب محسوب میشه .
    یک سایت شبیه سایت”با ما” (خرید و فروش خودرو) که امکانات و بازدید زیادی داره.
    یکسری گفته اند که با وردپرس نمیشه.
    آیا با نوشتن افزونه میشه این امکانات رو بهش اضافه کرد ؟
    ۲- آیا نوشتن افزونه ها بواسطه آشنایی با پی اچ پی و دیدن چند آموزش قابل انجام هست ؟

    • سیروس
      - ۲۷ آذر , ۱۳۹۷

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

  • نسیم
    - ۲۰ مهر , ۱۳۹۹

    سلام
    ممنون از توضیحات خیلی خوبتون
    من نیاز به طراحی یک جستجوگر برای جستجوی موارد وارد شده در لیست ثبت نام دارم، آیا از این طریق میتونم مشکلمو حل کنم؟

  • طراحی وب سایت
    - ۱۴ دی , ۱۳۹۹

    بسیار خلاصه و مید .
    با تشکر از شما

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

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

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