دليلك النهائي للعمل مع ثيمات WordPress Child

نشرت: 2016-01-05

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

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

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

  • كيفية استخدام موضوع فرعي لتكييف موضوع رئيسي تابع لجهة خارجية أو إطار عمل موضوعي لاحتياجات مشروعك
  • كيف يعطي WordPress الأولوية لملفات القوالب في كل من السمات الرئيسية والفرعية
  • كيفية تجاوز وظائف النسق الرئيسي في ملف وظائف القالب الفرعي الخاص بك.

فهم مواضيع الوالدين والطفل

من الناحية النظرية ، يمكن أن يعمل أي موضوع كموضوع رئيسي ، على الرغم من أن بعضها مصمم بشكل أفضل لهذا الدور (بما في ذلك دورنا!). إذا كنت تستخدم أحد السمات الخاصة بنا وترغب في تعديلها لمشروعك الخاص ، فمن الأفضل استخدام سمة فرعية للقيام بذلك بدلاً من اختراق السمة الرئيسية ، مما يعني أنك ستفقد جميع تغييراتك عند التحديث موضوع الإصدارات المستقبلية. لإنشاء قالب فرعي ، يمكنك ببساطة إنشاء سمة جديدة وإضافة ما يلي إلى بداية ورقة الأنماط الخاصة به. يستخدم المثال أدناه موضوع HeroThemes HelpGuru باعتباره الوالد ، ولكن يمكنك استخدام أي سمة ، بما في ذلك منتج HeroTheme آخر مثل KnowAll.

ابدأ في بناء قاعدة المعرفة الخاصة بك اليوم!

يتضمن موضوع KnowAll الخاص بنا سمة فرعية لمساعدتك في تخصيص موقع قاعدة المعرفة الخاصة بك

احصل على المظهر
/*
Theme Name: My child theme
Theme URI: URL of the theme or site it's used for
Description: Description of what the theme is for and its main features.
Author: Your name
Template: helpguru
Version: 1.0
*/
@import url("../helpguru/css/style.css");

الخطوط المهمة هي هاتان السطران:

Template: helpguru
@import url("../helpguru/css/style.css");

يحدد القسم الأول القالب ، الذي يخبر WordPress أن هذه سمة فرعية وأن أصلها هو سمة HelpGuru. لاحظ أنك تستخدم اسم مجلد القالب الرئيسي هنا وليس اسم القالب (لذلك أعلاه استخدمت "helpguru" وليس "HelpGuru").

يمكن تحويل HelpGuru باستخدام سمة فرعية
يمكن تحويل HelpGuru باستخدام سمة فرعية

يستورد القسم الثاني ورقة الأنماط من السمة الأصلية ، مما يعني أنه سيتم تنشيط كل تصميم القالب الأصلي في القالب الفرعي الخاص بك. يمكنك بعد ذلك إضافة التصميم الخاص بك أسفل إعلان @import هذا - وهذا يعني أنه سيتم استخدام التصميم من كلا النسختين ولكن في حالة وجود إعلان في كلتا ورقتي الأنماط لنفس العنصر ، فإن CSS للقالب الفرعي سيسود بسبب التتالي (مثل القالب الفرعي الخاص بك. يأتي التصميم بعد التصميم من موضوع الأصل).

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

ملفات قالب موضوع الوالدين والطفل

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

  • إذا كان القالب الفرعي الخاص بك يحتوي على ملف قالب يكون أعلى في التسلسل الهرمي من تلك الموجودة في السمة الأصلية ؛
  • أو إذا كان كل من السمة الرئيسية والفرعية تحتوي على نسخة من ملف النموذج المطلوب.

اتخاذ قرار بشأن ملفات قالب الموضوع الرئيسي أو الفرعي

سيستخدم WordPress التسلسل الهرمي للقالب لتحديد ملف القالب المراد استخدامه ، ولكن هذا يتفاعل مع الملفات الموجودة لديك في كل من السمات الرئيسية والطفل. ببساطة ، يمر WordPress بثلاث خطوات:

  1. يحدد نوع المحتوى المعروض.
  2. إنه يعمل من خلال التسلسل الهرمي للقالب حتى يعثر على ملف لعرض هذا المحتوى ، إما في النسق الرئيسي أو الفرعي.
  3. إذا كان الملف موجودًا في كلٍ من النسق الرئيسي والفرعي ، فإنه يستخدم واحدًا من النسق الفرعي.

دعنا نوضح هذا بمثال. يوضح الجدول أدناه مجموعة ملفات القوالب في نسقين افتراضيين ، أحدهما تابع للآخر. الملفات التي أبرزتها لها الأسبقية.

كيف يختار WordPress القوالب المراد استخدامها
كيف يختار WordPress القوالب المراد استخدامها

لذلك في المثال أعلاه ، دعنا نلقي نظرة على ملفات القوالب التي سيتم استخدامها لعرض أنواع معينة من المحتوى:

  • سيتم عرض المنشورات الفردية لنوع المنشور المخصص "للمنتج" باستخدام single-product.php من السمة الفرعية.
  • سيتم عرض المنشورات الفردية لأنواع المنشورات الأخرى (بما في ذلك المنشورات العادية) باستخدام single.php من القالب الفرعي.
  • سيتم عرض الصفحات الثابتة باستخدام page.php من السمة الرئيسية.
  • سيتم عرض القوائم الخاصة بفئة الأدوات باستخدام category-widgets.php من السمة الفرعية.
  • سيتم عرض قوائم الفئات الأخرى باستخدام category.php من السمة الرئيسية.
  • سيتم عرض قوائم الأرشيف الأخرى باستخدام archive.php من السمة الرئيسية.
  • سيتم عرض نتائج البحث باستخدام search.php من الموضوع الرئيسي.
  • سيتم عرض صفحات 404 باستخدام 404.php من السمة الأصلية.
  • سيتم عرض الصفحات الأخرى التي لا تحتوي على ملف قالب محدد باستخدام index.php من السمة الفرعية.

أخذ الأمر إلى أبعد من ذلك - تجاوز وظيفة موضوع الأصل

بالإضافة إلى تجاوز أو استكمال ملفات CSS و / أو القوالب في نسق أصلي ، يمكنك استخدام سمة فرعية لتجاوز الوظيفة الموجودة في السمة الأصلية أو لإضافة وظائف إضافية.

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

استخدام الأولوية لتجاوز وظيفة النسق الأصلي

لتنشيط كل وظيفة تضيفها في القالب الفرعي الخاص بك ، ستحتاج إلى إرفاقها بخطاف إجراء أو خطاف مرشح باستخدام add_action() أو add_filter() . add_action() و add_filter() لها ثلاث معاملات:

  • $tag - المعرف الفريد للإجراء أو خطاف المرشح
  • $function_to_add - اسم وظيفتك
  • $priority - الأولوية التي تريد ربط وظيفتك بها (المزيد منها قريبًا جدًا)

باستخدام add_filter() ، يمكنك استخدام المعامل الاختياري الرابع ، $arguments ، لكن هذا ليس له صلة خاصة بالسمات الفرعية. في معظم الحالات ، يتم استخدام المعلمتين الأوليين فقط (وكلاهما مطلوب) ، ولكن يمكنك استخدام معلمة $priority الاختيارية لتجاوز وظيفة في السمة الأصلية مع الوظيفة الموجودة في السمة الفرعية الخاصة بك. كلما كانت الأولوية أعلى ، يتم تحميلها لاحقًا: القيمة الافتراضية هي 10 ، لذلك إذا لم تحدد السمة الرئيسية أولوية ، يمكنك ببساطة تعيين الأولوية في السمة الفرعية الخاصة بك إلى رقم أعلى من 10. فلنلقِ نظرة على كيفية ذلك يعمل. تخيل أنك تعمل مع طفل من موضوع HelpGuru وتريد تجاوز وظائف القائمة وإضافة وظائفك الخاصة. يتضمن هذا الموضوع وظيفة ht_theme_setup() لإعداد السمة (بما في ذلك قوائم التسجيل وإضافة دعم الصورة المميزة والمزيد) ، والتي يتم إرفاقها بخطاف الإجراء after_setup_theme . الكود الموجود في ملف وظائف HelpGuru هو كما يلي:

if ( ! function_exists( 'ht_theme_setup' ) ) :
function ht_theme_setup() {
// contents of function
}
}
add_action( 'after_setup_theme', 'ht_theme_setup' );

لتجاوز عناصر ht_theme_setup() (ولكن ليس كلها: سنصل إلى ذلك قريبًا) في السمة الفرعية الخاصة بك ، يمكنك كتابة دالة تحل محل عناصر الوظيفة التي يوفرها HelpGuru وإرفاقها بالإجراء after_setup_theme الخطاف ، مع تحديد أولوية أعلى من 10:

function my_theme_setup() {
// contents of function
}
add_action( 'after_setup_theme', 'my_theme_setup', 15 );

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

استخدام وظائف قابلة للتوصيل للسماح بتجاوز موضوع الطفل

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

if ( ! function_exists( 'ht_theme_setup' ) ) :
function ht_theme_setup() {
// contents of function
}
}

إذا لم يتم تمرير وظيفة بنفس الاسم بالفعل (على سبيل المثال في القالب الفرعي) ، فسيتم تمرير الوظيفة من النسق الرئيسي. ولكن إذا واجه WordPress بالفعل وظيفة بهذا الاسم ، فسوف يتجاهل الوظيفة القابلة للتوصيل (أي تلك الموجودة في السمة الرئيسية). لإنجاز هذا العمل ، ما عليك سوى إنشاء وظائف في نسق طفلك بنفس الاسم مثل تلك الموجودة في السمة الرئيسية الخاصة بك والتي تريد تجاوزها. لذلك لتجاوز وظيفة ht_theme_setup() بالكامل ، يمكنك استخدام هذا في قالب طفلك:

function ht_theme_setup() {
// contents of function
}

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


ملخص

كما آمل أن أكون قد أوضحت ، فإن العمل مع السمات الفرعية يمكن أن يعزز كفاءتك وفعاليتك كمطور WordPress ، خاصة إذا قمت بتطوير مواقع مخصصة للعملاء أو لنفسك. على الأقل ، يمكن أن يؤدي استخدام سمة فرعية لموضوع موجود مثل أحد موضوعات HeroThemes الخاصة بنا إلى جعل سير عمل التطوير الخاص بك أسرع وأكثر كفاءة ، حيث يوفر عليك القيام بنفس العمل مرارًا وتكرارًا.

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