مقدمة عن الخطافات Hooks في ووردبريس

hooks photoلا أخفيك سرا انني قمت بالتعديل على هذا المقال أكثر من مرة ليس بسبب صعوبة مفهوم الخطافات hooks في ووردبريس بل بالعكس فالسبب هو محاولتي لتوصيل مدى سهولة هذا المفهوم وما يتعلق به بأبسط طريقة وتوصلت أخيرا الى أن أقوم بالشرح معتمدا بصورة كبيرة على الأمثلة وقبل ذلك الإشارة الى السبب الذي أدى الى الحوجة للخطافات hooks وطريقة عملها.

لماذا الخطافات hooks وكيف تعمل؟

تخيل معي أنك تريد أن تنفذ الدالة الخاصة بك في وقت معين أثناء دورة حياة الووردبريس أو بمعنى أخر أثناء تنفيذ الووردبريس لأكواده الخاصة … لعمل ذلك بالطبع لن تقوم بالتعديل على ملفات الووردبريس الأساسية لوضع الدوال الخاصة فهي طريقة غير عملية خصوصا أنك لن تستطيع عمل ذلك في حالة أنك تريد إنشاء إضافة أو قالب للعمل على أي موقع بدون أن يضطر صاحب الموقع لعمل التعديل اليدوي على ملفات الووردبريس. ما الحل إذن؟ الحل هو أن تستخدم الخطافات hooks هذه الألية الرائعة التي يوفرها الووردبريس والتي تمكنك من شيئين مهمين وهما:

  1. إضافة دوالك الخاصة لتنفذ في وقت معين أثناء تنفيذ الأكواد الخاصة بالووردبريس وهي ما يعرف بالأحداث Actions.
  2. التعديل على قيم البيانات الخاصة بالموقع قبل حفظها أو قبل إسترجاعها وهي ما يعرف بالمفلترات Filters.

هذه الأحداث Actions  والمفلترات Filters هي ما يعرف بالخطافات Hooks في الووردبريس وسنتعرف عليها بتفصيل أكبر في الفقرات القادمة.

 

الأحداث في ووردبريس Actions

ويمكن أن نعرفها ببساطة بأنها طريقة تمكننا من إخبار الووردبريس بتنفيذ دالة معينة عند حصول حدث معين …

مثلا إذا كنا نريد تنفيذ الدالة my_function عندما ينفذ الووردبريس الحدث my_action   علينا ببساطة أن نخبره بذلك من خلال إضافة هذه الدالة الى هذا الحدث. ويتم ذلك من خلال الدالة add_actions بالطريقة التالية:

add_action('my_action', ‘my_function’);

بهذه الطريقة سينفذ الووردبريس هذه الدالة كلما ظهر الحدث my_actions أي أثناء تنفيذ الووردبريس لأكواده الخاصة (يمكنك إضافة احداث خاصة بك أيضا وسنتناول هذا في ما بعد إن شاء الله).

أمثلة للأحداث Actions في ووردبريس:

إرسال بريد إلكتروني عند نشر المقال:

إذا أردنا أن نرسل بريدا للمدير عندما يتم إضافة مقال جديد في الموقع يمكننا عمل الaction التالي:

add_action('publish_post','send_email');

حيث نعرف الدالة send_email والتي تقوم بإرسال الإيميل قبل إضافة هذا الaction.

تسجيل الأشرطة الجانبية Sidebars في قالب Twenty Fourteen

لنأخذ مثال أخر وهذه المرة المثال عملي من القالب المشهور Twenty Fourteen وبالتحديد من ملف الfunctions الخاص به

function twentyfourteen_widgets_init() {
	require get_template_directory() . '/inc/widgets.php';
	register_widget( 'Twenty_Fourteen_Ephemera_Widget' );

	register_sidebar( array(
		'name'          => __( 'Primary Sidebar', 'twentyfourteen' ),
		'id'            => 'sidebar-1',
		'description'   => __( 'Main sidebar that appears on the left.', 'twentyfourteen' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<h1 class="widget-title">',
		'after_title'   => '</h1>',
	) );
	register_sidebar( array(
		'name'          => __( 'Content Sidebar', 'twentyfourteen' ),
		'id'            => 'sidebar-2',
		'description'   => __( 'Additional sidebar that appears on the right.', 'twentyfourteen' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<h1 class="widget-title">',
		'after_title'   => '</h1>',
	) );
	register_sidebar( array(
		'name'          => __( 'Footer Widget Area', 'twentyfourteen' ),
		'id'            => 'sidebar-3',
		'description'   => __( 'Appears in the footer section of the site.', 'twentyfourteen' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<h1 class="widget-title">',
		'after_title'   => '</h1>',
	) );
}
add_action( 'widgets_init', 'twentyfourteen_widgets_init' );

في السطر الأول تم تعريف الدالة twentyfourteen_widgets_initوالتي تقوم بتسجيل الأشرطة الجانبية Sidebars التي يدعمها القالب بإستخدام الدالة التي يوفرها الووردبريس وهي register_sidebar . لكن حتى يتم تسجيل هذه المربعات الجانبية من خلال الووردبريس لابد أن يعلم بوجودها أثناء تعريفه للمربعات الجانبية Widget Initilization اي أثناء الحدث widgets_initلذلك تم إضافة الدالة twentyfourteen_widgets_init الى الحدث widgets_init وبهذه الطريقة سيقوم الووردبريس بتنفيذها في الوقت والمكان المناسب… شئ رائع صحيح. هنالك الكثير من الأحداث التي يمكنك إضافة الدوال الخاص بك اليها أو يمكننا القول hook into it ويمكنك الإطلاع على الأحداث التي يوفرها الووردبريس من هنا

المفلترات في الووردبريس Filters

هي النوع الثاني من الhooks في الووردبريس وهي مختصة اكثر بالبيانات. وكما أن الactions تمكننا من إضافة كود معين عند حدوث حدث معين فإن الfilters تمكننا من التعديل على محتوى معين (عنوان المقالة مثلا) قبل حفظه في قاعدة البيانات أو قبل عرضه في الموقع و تمريره للدالة التي تطلبه. أي يمكننا أن نقول أنها دالة تمر البيانات عبرها (لتعدلها) أثناء دورة حياة هذه البيانات (طلبها من قاعدة البيانات إنتهاء بعرضها أو طلب حفظها إنتهاء بكتابتها في قاعدة البيانات). وربما هذا يوضح لك سبب تسميتهما بالfilters.

أمثلة للمفلترات Filters في ووردبريس

إضافة توقيع لكل المقالات

من خلال الfilters يمكننا مثلا إضافة توقيع يظهر في كل مقال وذلك بعمل filter لمحتويات المقال the_content  قبل عرضه بحيث نضيف له التوقيع قبل عرضه في الموقع

add_filter ( 'the_content', 'add_signiture' );

قمنا بتعريف الدالة add_signiture  بحيث تستقبل المحتويات (المقال) the_content  وتضيف لها التوقيع وترجع المحتويات الجديدة بعد إضافة التوقيع. ولاحظ انه عند إضافة filter معين فإن الووردبريس يقوم تلقائيا بتمرير البيانات (المعامل الاول في الدالة add_filter ) الى الدالة (المعامل الثاني في الدالة add_filter ).

تعديل طول مختصر المقال Excerpt

تخيل معي أنك تريد تعديل طول مختصر المقال والذي يظهر عادة في الصفحة الرئيسية أو صفحة التصنيف وهو عبارة عن بداية المقال عادة  نريد تعديل طوله الى 200 جرف… بكل بساطة سنقوم بعمل filter لعدد حروف المختصر أي أننا سنقوم بتعديل طول حروف المختصر وذلك من خلال الكود التالي

   function modify_excerpt_length() {
      return 200;
   }

   add_filter("excerpt_length", "modify_excerpt_length");

لاحظ أننا قمنا بتعريف الدالة modify_excerpt_length  والتي فقط تقوم بإرجاع القيمة 200 (وهي عدد الحروف الذي نريده) وبعدها قمنا بعمل filter لطول المقال excerpt_lenght  وأضفنا الدالة الخاصة بنا modify_excerpt_length والتي ترجع القيمة 200 وبهذه الطريقة يتم إستبدال طول المختصر الى 200. هنالك العديد من الfilters التي يوفرها الووردبريس ويمكنك الإطلاع عليها من هنا.

مراجعة لما سبق: بالطبع هذا المقال عبارة عن نظرة اساسية  وتعريف سريع للhooks تعرفنا فيها على:

  • تعريف للخطافات وطريقة عملها وسبب وجودها.
  • تعريف كل من الأحداث Actions والمفلترات Filters مع بعض الأمثلة العملية لهما.

وما زال هنالك المزيد من الاشياء المتعلقة بالactions والfilters مثل

  • إختيار الhooks المناسبة لإضافة الدالة المعنية اليها.
  • أمكانية إضافة الhooks الخاصة بك.
  • وتعديل أولوية تنفيذ الدوال التابعة لنفس الhooks.
  • التعرف على بقية الدوال الموجودة في الواجهة البرمجية للإضافات Plugin API التي يوفرها الووردبريس.

وهذه الأشياء هي ما سنتعرف عليه في مقال اخر ان شاء الله. لا تنسى مشاركة المقال مع الأصدقاء ^^

 

[mc4wp_form]

 

مراجع ومصادر:

http://codex.wordpress.org/Plugin_API

http://www.smashingmagazine.com/2011/10/07/definitive-guide-wordpress-hooks/

مشاركة:

Facebook
Twitter
LinkedIn
WhatsApp

مقالات ذات صلة