دليل لخطافات ووردبريس

نشرت: 2021-07-19

قد يبدو نظام الخطافات شاقًا للمبتدئين ، لكنه من أفضل الأشياء في WordPress. سيساعدك هذا الدليل على فهم أساسيات الخطافات وكيفية استخدامها ، مع تقديم أمثلة على الاستخدام والمزيد من النصائح.

لماذا يجب عليك استخدام الخطافات؟

في حال لم تكن على علم بالفعل ، فمن السيئ حقًا تغيير الملفات الأساسية في WordPress (WP). بغض النظر عن المخاطر الأمنية ، سيتم الكتابة فوق تغييراتك في كل مرة تقوم فيها بتحديث WP! الشيء نفسه ينطبق على الإضافات والسمات.

بالتأكيد، يمكن أن تتبع كل تحديث وإعادة تنفيذ-التغييرات. هل يمكن أيضا لكمة من خلال خلية النحل للحصول على العسل. قد يبدو الأمر مناسبًا ولكن من المحتمل أن تتعرض للسع عاجلاً أم آجلاً.

ببساطة ، يجب عليك استخدام الخطافات لأنها تعوض مخاطر تغيير الوظائف الأساسية .

بهذا المعنى ، لا يمكن المبالغة في أهمية الخطافات . إنها مفتاح لقابلية توسيع WP وحجر الزاوية في المكونات الإضافية والأنظمة البيئية الخاصة بها. ستوفر على نفسك الكثير من الصداع من خلال تعلم الأساسيات والاستفادة منها جيدًا.

ما هم؟

يمكنك التفكير في الخطافات على أنها أحداث تحدث خلال تسلسل تحميل WP. عندما يواجه WP خطافًا ، فإنه يطلق جميع الوظائف المرتبطة بهذا الخطاف قبل المتابعة.

يمكنك بالتالي الاستفادة من الخطافات لإضافة وظائف أو تغيير المتغيرات عبر WP . يمكنك استخدام الخطافات الموجودة وإضافة خطافات جديدة. يمكنك إزالة الخطافات التي لا تحتاج إليها. يمكنك الضغط على نفس الخطاف أكثر من مرة ، مع إعطاء الأولوية لكل وظيفة كما تراه مناسبًا. إنه نظام مرن للغاية ، مقيد فقط بما هي السنانير المتاحة وما هي البيانات التي تعرضها.

كيف يعملون؟

يمكنك إضافة أكثر أو أكثر من الوظائف إلى الخطاف. يمكن أيضًا إضافة وظائف أخرى بواسطة السمة أو الإضافات أو WP نفسها. عند تحميل الفسفور الابيض ستواجه الخطاف. يتحقق من قائمة بجميع الوظائف المرتبطة بالخطاف. يقوم WP بتشغيل كل هذه الوظائف بترتيب الأولوية . بمجرد الانتهاء من ذلك ، يستأنف تحميل كل شيء بعد الخطاف.

كيف يبدون؟

تبدو إضافة وظيفة إلى الخطاف كما يلي:

add_action (hook_name $ ، $ function_name ، $ priority ، $ arguments) ؛

$ hook_name هو اسم الخطاف الذي تريد استهدافه

$ function_name هو اسم الوظيفة التي تريد إضافتها إلى هذا الخطاف

$ الأولوية هي عدد صحيح يشير إلى FUNCTION_NAME $ الصورة الأولوية في $ hook_name الصورة طابور. وانخفاض عدد، وارتفاع الأولوية. بدءًا من 1 ، يمكن أن يكون هذا الرقم مرتفعًا كما تريد (ضمن حدود النظام) ولكن من غير المحتمل أن تراه أعلى من 40. القيمة الافتراضية هي 10.

الوسيطات $ هي عدد صحيح يشير إلى عدد الوسائط التي تستخدمها في الدالة. يجب أن يتطابق هذا مع عدد الوسائط التي تم تمريرها إلى الوظيفة. القيمة الافتراضية هي 1.

إزالة وظيفة من الخطاف هي نفسها تقريبًا:

remove_action (hook_name $، $ function_name، $ priority) ؛

و$ FUNCTION_NAME و$ الأولوية يجب أن تتطابق القيم الأصلية من وظيفة ADD_ACTION المقابلة، أو أنها لن تتم إزالة!

أنواع الخطاف

هناك نوعان رئيسيان من الخطافات : خطافات الحركة وخطافات المرشح . إنهما متشابهان في كثير من النواحي - يتم استدعاء add_action () ونظيرته add_filter () بنفس الطريقة. يكمن الاختلاف في الوظيفة التي تمر من خلالها:


// قم بتشغيل بعض التعليمات البرمجية
add_action ('where_to_do_the_thing'، 'do_the_thing') ؛
وظيفة do_the_thing () {
// نفذ بعض الإجراءات المطلوبة للقيام بهذا الشيء
}

// تغيير متغير
add_filter ('the_thing'، 'change_the_thing') ؛
وظيفة change_the_thing ($ شيء) {
// تصفية $ شيء والتغيير إلى ما تريد ، ثم ...

إرجاع الشيء $؛
}

لاحظ أنه في المثال الثاني ، الوسيطة الأولى التي تم تمريرها إلى functio n هي القيمة التي يتم تعديلها. أي وسيطات إضافية ستكون من أجل المنفعة فقط ولن يتم تمريرها مرة أخرى من خلال الخطاف.

ربما لاحظت أنني تركت الوسيطات ذات الأولوية $ و $ arguments . هذا لأن القيم الافتراضية جيدة. إذا كان ذلك مفيدًا ، فإن ما سبق هو في الأساس نفس:


// قم بتشغيل بعض التعليمات البرمجية
add_action ('where_to_do_the_thing'، 'do_the_thing'، 10، 1) ؛
// تغيير متغير
add_filter ('the_thing'، 'change_the_thing'، 10، 1) ؛

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

أمثلة أقل اختراعًا

لنفترض أنك تريد أن ترسل WP إشعارًا بالبريد الإلكتروني عندما يقوم مستخدم جديد بالتسجيل على موقعك. بالرجوع إلى مجلد WP codex ، تجد رابط الإجراء user_register . يوفر لك هذا المتغير $ user_id ، والذي يمكنك استخدامه للحصول على تفاصيل المستخدم. يعالج wp_mail () الباقي:


add_action ('user_register'، 'notify_on_user_registration') ؛
الوظيفة notify_on_user_registration ($ user_id) {

// احصل على المستخدم
المستخدم $ = get_user_by ('id'، $ user_id) ؛

// إعداد موضوع البريد الإلكتروني ونصه
$ subject = "تسجيل مستخدم جديد" ؛
$ message = "تم تسجيل مستخدم جديد {$ user-> first_name} {$ user-> last_name}." ؛

// أرسل البريد الإلكتروني
wp_mail ('[email protected]'، $ subject، $ message) ؛
}

ماذا لو كنت تريد إعادة توجيه المستخدمين إلى صفحتك الأولى عند تسجيل الدخول؟ يمكنك تحقيق ذلك بسهولة من خلال ربط login_redirect ، والذي يوفر عنوان URL الذي تتم إعادة توجيه المستخدمين إليه افتراضيًا:


add_filter ('login_redirect'، 'redirect_user_on_login') ؛
وظيفة redirect_user_on_login ($ redirect_to) {
return home_url () ،
}

بعد فترة وجيزة من إضافة هذا ، ستدرك بسرعة أنك كمسؤول ، تريد أن يتم نقلك مباشرة إلى لوحة معلومات WP بدلاً من الصفحة الرئيسية. ليست مشكلة - ما عليك سوى تعديل الخطاف للعمل للمسؤولين فقط:


add_filter ('login_redirect'، 'redirect_user_on_login'، 10، 3) ؛
function redirect_user_on_login ($ redirect_to، $ request، $ user) {
// قم بتغيير عنوان URL لتسجيل الدخول ما لم يكن المستخدم مسؤولاً
if (isset ($ user-> tools) && is_array ($ user-> tools)) {
if (in_array ('administrator'، $ user-> tools)) {
إرجاع $ redirect_to؛ // إعادة توجيه المسؤولين إلى الافتراضي (منطقة الإدارة)
}
}

إرجاع $ redirect_to؛
}

لاحظ أن الأولوية $ و $ arguments دخلت حيز التنفيذ!

نظرًا لأنك تحتاج إلى الوصول إلى وسيطة الخطاف الثالثة للتحقق من مستوى المستخدم ، فأنت بحاجة إلى عرض 3 وسيطات ؛ تمرر القيمة 3.

قيمة $ أولوية 10 هو نفس الافتراضي، وبطبيعة الحال، ولكن يتم تحديد من أجل الوصول إلى قيمة الحجج $ أنك بحاجة أعلاه.

صنع الخطافات الخاصة بك

القدرة على إنشاء خطافات مخصصة بين يديك! تبدو الوظائف التي يوفرها WP كما يلي:

do_action (hook_name $ ، $ arg_1 ، $ arg_2… $ arg_n) ؛

application_filters ($ hook_name، $ arg_1، $ arg_2… $ arg_n) ؛

مرة أخرى ، إنهما متشابهان نوعًا ما. تقبل كلتا الوظيفتين اسمًا - وهذا هو المكان الذي تسمي فيه الخطاف. جميع الوسائط التالية هي نفس الوسائط التي تم توفيرها للوظائف التي تضيفها إلى هذا الخطاف. يجب أن يحتوي () application_filters على وسيطة إضافية واحدة على الأقل (الوسيطة التي يتم تصفيتها) ، ولكن جميع العوامل الأخرى اختيارية.

على سبيل المثال ، إذا كنت تريد إدخال برنامج نصي للتحليلات قبل علامة النص الافتتاحي مباشرة ، ولكن لا تريد تحويل header.php إلى فوضى:


<؟ php do_action ('before_body_tag')؛ ؟؛>
</head>
<الجسم>

ثم يمكنك إضافة العديد من البرامج النصية حسب حاجتك:


add_action ('before_body_tag'، 'add_analytics_custom') ؛
الوظيفة add_analytics_custom () {
// <script> ورمز التحليلات هنا
}

يعمل application_filters () بشكل مختلف قليلاً. كما تمت مناقشته أعلاه ، يتم استخدام المرشحات لتعديل القيم. نظرًا لأن المرشحات ترجع قيمة ، فأنت تقوم بتعيين استدعاء application_filters () إلى متغير:


<؟ php $ text = apply_filters ('call_to_action_text'، 'About us')؛ ؟>
<a href = ”<؟ php echo get_permalink ('about')؛ ؟> ”class =” button cta ”>
<؟ php echo $ text؛ ؟>
</a>

// بدلاً من ذلك ، يمكنك تكرار نتيجة application_filters () مباشرةً
<a href = ”<؟ php echo get_permalink ('about')؛ ؟> ”class =” button cta ”>
<؟ php echo application_filters ('call_to_action_text'، 'About us')؛ ؟>
</a>

بعد ذلك يمكنك تعديل المتغير المفلتر حسب الضرورة:


add_filter ('call_to_action_text'، 'change_call_to_action_text') ؛
الوظيفة change_call_to_action_text ($ text) {
إذا (is_front_page ()) {
$ text = 'اكتشف المزيد'؛
}

إرجاع نص $؛
}

السلبيات

لا يوجد نظام مثالي ، والخطافات ليست استثناء. عندما يتعلق الأمر بالخطافات الأساسية ، عليك عمومًا أن تفعل ما أعطيت لك. من حين لآخر ستواجه مواقف لا يكون فيها الخطاف في المكان الأكثر ملاءمة لك. ليس هناك الكثير الذي يمكن القيام به عند حدوث ذلك ، لذا انظر إليه على أنه فرصة لإيجاد حل إبداعي!

أيضًا ، نظرًا لأن الخطافات يمكن أن توجد في أي مكان داخل بنية دليل WP ، يكون من الصعب أحيانًا العثور على مكان حدوث منطق معين. يمكن تعويض ذلك عن طريق فصل وصلات الوظيفة الخاصة بك إلى ملفاتها الخاصة.

مزيد من النصائح

  • عند إنشاء وظائف لـ hooks ، تأكد من أن الاسم فريد ، وإلا سيحدث تعارض. الأمر نفسه ينطبق على أسماء الخطاف والمرشحات المخصصة!
  • استخدم الخطافات للحفاظ على القوالب الخاصة بك منظمة. يمكن أن تساعد بعض أدوات ربط do_action العامة () العامة التي تم إدخالها في جميع نماذجك في إبقاء المنطق بعيدًا عن الترميز (غالبًا ما تكون فكرة جيدة).
  • عند تثبيت مكون إضافي جديد ، تحقق من الخطافات التي يوفرها وفكر في كيفية استخدامها. وهذا مفيد خصوصا للمرة التي لا مفر منها أن البرنامج المساعد لا تفعل تماما ما تريد.
  • عند إضافة إجراء أو عامل تصفية ، يمكنك استبدال اسم الوظيفة بالوظيفة نفسها. يمكن أن يساعد ذلك في الحفاظ على الإجراءات والفلاتر قائمة بذاتها. لا يمكن إزالة الوظائف المضافة بهذه الطريقة باستخدام remove_action () أو remove_filter () ، لذا كن حذرًا!

add_action ('where_to_do_the_thing'، function () {
صدى "تم الشيء" ؛
} ، 10 ، 1) ؛
  • تحقق من الوظائف الأخرى المتعلقة بالربط المتاحة ، مثل did_action () أو has_action () . أنت لا تعرف أبدًا متى سيكون مجرد إدراكهم مفيدًا.

ملخص

استخدام الخطافات هو عادة. حاول أن تسأل نفسك سؤالين بسيطين في أي وقت تعمل فيه على مشروع WP الخاص بك:

  1. "هل هناك خطاف من شأنه أن يجعل هذا أسهل بالنسبة لي؟"
  2. "هل يمكنني إضافة خطاف يجعل هذا الأمر أسهل بالنسبة لي في المستقبل؟"

بمجرد الاقتراب من تطوير الفسفور الابيض بهذا الموقف ، ستجد العديد من الأبواب تفتح.

الأمثلة في هذا الدليل هي غيض من فيض. هناك المئات من الخطافات في WP core وحدها ، ناهيك عن مكتبة ضخمة من المكونات الإضافية والسمات. إلقاء نظرة على الإشارة العمل WP والمرجعية مرشح للحصول على قائمة كاملة من السنانير WP الأساسية.


إذا كنت بحاجة إلى مساعدة في تطوير الويب الخاص بك ، فلا تتردد في الاتصال بنا.