চাইল্ড_থেমের আগে প্যারেন্ট_থমে ফাংশন.ফপি কীভাবে লোড করবেন?


12

আমার সমস্যাটি হয়েছিল যে functions.phpআমার চাইল্ড থিমের functions.phpফাইল লোড হওয়ার আগে আমাকে আমার পিতামাতার থিমের ফাইলটি লোড করতে হবে। এটি সেটআপ এবং আরম্ভ প্রক্রিয়ার জন্য প্রয়োজন। আমি / wp_core_root/wp-settings.php এর ভিতরে হুকগুলির দিকে তাকিয়েছি (নাম দেওয়া হয়েছে do_action('setup_theme');)।

সমস্যাটি হ'ল আমি জানিনা কীভাবে সেখানে প্রবেশ করতে পারি, কারণ আমি যে প্রথম ফাইলটি পাই তা চাইল্ড থিমের functions.php, তাই কোনও add_action( 'setup_theme', 'my_init_function' );কাজ করবে না ।

সম্পাদনা:
ক) আমি জানি যে প্লাগইনগুলি থিমের চেয়ে আগে লোড হয় এবং তাই প্রাথমিক জিজ্ঞাসাটি অ্যাক্সেস করতে পারে তবে আমি কোনও প্লাগিনের উপর নির্ভর করতে চাই না।
খ) এখানে wp-settings.php ফাইল থেকে কোড (সংক্ষিপ্ত) দেওয়া আছে

// happens a lot earlier:  
do_action( 'plugins_loaded' );

// localize stuff happening here
    do_action( 'setup_theme' );

        // Load the functions for the active theme, for both parent and child theme if applicable.
        if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
            include( STYLESHEETPATH . '/functions.php' );
        if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
            include( TEMPLATEPATH . '/functions.php' );
    // first available hook, *after* functions.php was loaded
    do_action( 'after_setup_theme' );

আমি দুটি জিনিস এড়াতে চাই: প্রথমে ব্যবহারকারীদের কাছে প্রচুর ব্যাখ্যা। দ্বিতীয়ত যদি কেউ কোনও কিছু ভেঙে দেয় তবে ঘটনাক্রমে বাবা-মা'র পদ্ধতিটি মোছার সাথে দড়িটি কেটে দিলে। লোকেরা কিছু না জেনে কিছু ভাঙার ঝুঁকি না নিয়ে কেবল ফাংশন.এফপি-র ভিতরে খেলবে play

অন্য কথায়: আমি কীভাবে আমার সন্তানের থিমগুলি ফাংশন.এফপি ফাইলটি পরিষ্কার রাখতে পারি, তবে পিতামাতার থিমগুলি বুটস্ট্র্যাপটি সম্পন্ন করে?

কোন ধারনা? অনেক ধন্যবাদ!


আপনি কি কেবল এটি অন্তর্ভুক্ত করতে পারবেন না?
wyrfel

আমার প্রশ্ন: কোথা থেকে? থিম প্রসঙ্গে লোড হওয়া প্রথম ফাইলটি হ'ল চাইল্ড থিম functions.php। "মোল্টো লোকো" wp-settings.phpফাইলটি কোরটিতে দেখুন (লাইন: 275-279 @wp 3.1 আরসি) ... এর মতো দেখতে: if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' );তাই আমি কোনও সুযোগ দেখতে পাচ্ছি না ... এবং আমি ব্যবহার করতে চাই না আমার থিমটি বুটস্ট্র্যাপ করার জন্য একটি প্লাগইন।
কায়সার

আমি এখানে পুরোপুরি কিছু অনুপস্থিত হতে পারি তবে আপনি যদি include(/path/to/parent/themes/functions.php)আপনার সন্তানের থিম ফাংশন.এফপি শীর্ষে সন্নিবেশ করেন তবে সেখানে সমস্ত কিছুই আগে লোড হয়ে গেছে। না?
wyrfel

@ ওয়াইরফেল: আমি আরও স্পষ্ট করে তুলতে কিউ আপডেট করেছি
কায়সার

আমি দেখছি, ধন্যবাদ, এখন এটি আরও পরিষ্কার। প্লাস আমি ধরে নিয়েছি আপনি কেবল একটি ইনস্টল করার জন্য এটি করছেন।
wyrfel

উত্তর:


11

জাস্টিন ট্যাডলক সম্প্রতি একটি আরও ভাল ফাংশন.এফপি ফাইল তৈরি করার বিষয়ে একটি দুর্দান্ত পোস্ট লিখেছেন
যেখানে (যদি আমি সঠিকভাবে মনে করি) তিনি এই সঠিক সমস্যাটি নিয়ে কাজ করেন।

দুর্ভাগ্যক্রমে তার সাইটটি এই মুহুর্তে বন্ধ রয়েছে তাই আপাতত আমার স্মৃতিতে আমাকে নির্ভর করতে হবে।

আপনি after_setup_themeহুক দিয়ে সঠিক পথে আছেন ।

  1. যতদূর আমি মনে করি কৌতুকটি হল আপনার ফিল্টার এবং ক্রিয়াগুলি এর ফাংশনে আবদ্ধ করা।
    নীচে উদাহরণ দেখুন।
  2. আপনি পিতামাতা এবং সন্তানের উভয় ফাইলেই এটি করেন functions.php
  3. তারপরে আপনি এই দুটি হুকের অগ্রাধিকার নিয়ে খেলতে পারেন।

হাজার শব্দ মূল্যের কোডের সামান্য বিট - আপনার পিতামাতার থিমটি দেখতে এমন function.phpহওয়া উচিত:

add_action( 'after_setup_theme', 'your_parent_theme_setup', 9 );
function your_parent_theme_setup() {    
    add_action(admin_init, your_admin_init);
    add_filter(the_content, your_content_filter);
}

function your_admin_init () {
...
}

function your_content_filter() {
...
}

আহ, লেখার জন্য ধন্যবাদ (+1)। আপনি একটি চিত্তাকর্ষক মস্তিষ্ক পেয়েছেন;)। সমস্যাটি হ'ল after_setup_themeঅনেক দেরি হয়ে গেছে কারণ ফাংশন.এফপি ফাইলগুলি ইতিমধ্যে লোড হয়েছিল।
কায়সার

সম্পাদনা: আপনার কোডটি পুনর্বিবেচনা করার পরে এবং "পিতামাতা এবং সন্তানের উভয় ফাংশনে এটি করুন ph পিএইচপি" & "অগ্রাধিকারের সাথে খেলুন" এটি অর্থবোধ শুরু করে। তবুও আরও ভাল সমাধান সন্ধান করা হচ্ছে যে ব্যবহারকারী সেই সহজ ভাঙতে পারে না, তবে এটি উপলব্ধিযোগ্য! ধন্যবাদ!
কায়সার

এখানে কোনও আসল সমাধান নেই, তাই আমি এটি চিহ্নিত করবো, কারণ আপনিই প্রথম প্রস্তাব করেছিলেন।
কায়সার

9

প্রথমত, আপনি পারবেন না। শিশু থিমের ফাংশন.এফপি সর্বদা প্রথম, পিরিয়ড লোড করে।

দ্বিতীয়ত, থিমগুলি সেটআপ_থমে হুক করতে পারে না। প্লাগইনগুলি পারে তবে প্রথম থিমটি হ'ল প্রথম জিনিসটি হ'ল after_setup_theme।

যদি আপনার পিতামাতাকে সঠিকভাবে ডিজাইন করা হয় তবে শিশু পিতা-মাতার মধ্যে ফাংশন এবং স্টাফগুলিকে ওভাররাইড করতে সক্ষম তবে কেবল যখন এটি প্রথম লোড হয়।

মোটা কথা বলতে গেলে, আপনি যদি মনে করেন আপনার পিতামাতার ফাংশন ফাইলটি প্রথমে লোড করা দরকার, তবে আপনি সম্ভবত এটি কোনওভাবেই করছেন wrong আপনার আরও বৃহত্তর সমস্যাটি ব্যাখ্যা করা দরকার।


আপনার উত্তরের জন্য ধন্যবাদ. আমি থিমগুলির আগে প্লাগইনগুলি লোড করার প্রয়োজনীয়তাটি বুঝতে পেরেছি এবং ইতিমধ্যে সত্যটি উপলব্ধি করেছি (উপরে পড়ুন: "এবং আমি আমার থিমটি বুটস্ট্র্যাপ করতে একটি প্লাগইন ব্যবহার করতে চাই না" ")। আমার কেসটি বিস্তারিতভাবে জানাতে: আমি একটি আইএনআই ফাইল পেয়েছি যা আমার সমস্ত কাঠামোর অংশ লোড করার বিষয়ে চিন্তা করে, যা প্যারেন্ট থিম ফাংশন পিএইচপি থেকে শুরু করে ফাইলের প্রয়োজনীয়তা এবং আর ডি-ক্লাস লোড করে। ইনসক্লাস এ) লোড করার বিষয়ে যত্নশীল এবং চাইল্ড থিম .ini-ফাইলগুলি থেকে ডেটার অ্যারে এবং তারপরে আরও প্রসেসিং প্রাক্তনের জন্য এটি পৃথক শ্রেণিতে ঠেলা দেয়। মেটা বাক্সগুলি, কাস্টম পোস্টের প্রকারগুলি ইত্যাদি
কায়সার

আমার সমস্যাটি হ'ল আমাকে এই সমস্ত কিছু আমার পিতামাতার ফাংশন.এফপি ফাইল থেকে করাতে হবে, তাই চাইল্ড থিমের চারপাশে খেলার সময় একটি সাধারণ ব্যবহারকারী এটিকে ভেঙে ফেলতে পারেন না। আমার দ্বিতীয় সমস্যাটি হ'ল চাইল্ড থিমের ফাংশন.এফপি ফাইলের মধ্যে এই শ্রেণীর সমস্তগুলি উপলব্ধ নেই, সুতরাং সেগুলির কোনও ব্যবহার হয় না ... তবে সম্ভবত আমি এখানেই একটি বড় চিন্তাভাবনা ত্রুটি পেয়েছি । কীভাবে এটি আরও ভাল করা যায় সে সম্পর্কে কোনও ধারণা বা পরামর্শ?
কায়সার

3
.... আমি মনে করি আপনাকে কেবল এই সত্যটি গ্রহণ করতে হবে যে কোনও ব্যবহারকারী যদি জিনিসগুলি ভেঙে দেয়, তবে এটি সত্যই তাদের সমস্যা। নীচের লাইন: প্রথমে পিতামাতার থিমের ফাংশন.এফপি লোড করার এবং চাইল্ড থিমটি "পরিষ্কার" রেখে যাওয়ার কোনও উপায় নেই । আপনার পিতামাতার থিমের ফাংশন.এফপি ফাইলটি লোড হওয়ার পরে চালানোর জন্য যদি চাইল্ড থিমের কিছু দরকার থাকে তবে আপনি এটি after_setup_theme তে আবদ্ধ একটি ফাংশনের ভিতরে রেখেছেন। এটি উভয় ফাংশন.এফপি ফাইল লোডের পরে চলে।
অটো

ঠিক আছে. এটি এত বড় সমস্যা নয়। কোনও সম্ভাবনা থাকলে আমি কেবল আন্তরিকতাবাদী। প্রশ্ন: ডিআইডি পদ্ধতির পরে একটি হুক আছে এবং কেবল after_setup_themeহুক ব্যবহার করে না এমন "ফ্রেমওয়ার্কের জন্য এটি নুনের কী দরকার?" শুধু হুক "স্প্যাম" না করা, বা এটি আরও "উদ্যোগ" বা "কুল" এর? মানে: থিম নির্দিষ্ট প্যারালাল হুকের পিছনে "সেরা অনুশীলন" ধারণাটি কি "প্লাগিনগুলির জন্য মূল হুকগুলি ছেড়ে দেয়"? (এটি বর্তমানে আমি এটি হ্যান্ডেল করি))
কায়সার

"আপনি যদি সেখানে যাচ্ছেন, অতিরিক্ত ক্রিয়াকলাপ নিয়ে বিরক্ত করবেন না Just শুধু আফটার_সেটআপ_থমে থাকুন।" ঠিক আছে. ধন্যবাদ। +1
কায়সার

4

সুতরাং আপনি সন্তানের ফাংশন.এফপি থেকে কোডটি কার্যকর করার চেষ্টা করছেন তবে পিতামাতার থিমটি লোড হওয়ার পরে। সহজ, কেবল একটি কাস্টম ক্রিয়া ব্যবহার করুন:

এর শেষে parent/functions.php:

do_action('parent_loaded');

ইন child/functions.php:

function parent_loaded() {
    // do init stuff
}
add_action('parent_loaded', 'parent_loaded');

সমস্ত পিতামাতার থিমগুলি তাদের লবণের জন্য এটি করা হয়। আরও কী, চাইল্ড থিমটি ব্যবহারের জন্য তাদের কয়েকটি অন্যান্য ক্রিয়া এবং ফিল্টার ছড়িয়ে পড়ে।


আমি যতটা সম্ভব নির্দেশাবলী এড়াতে চেষ্টা করি। চাইল্ড থিম ফোল্ডারে আমি একটি কনফিগারেশন ফাইল থেকে স্যুইচ করেছি এবং এর পরিবর্তে এখন ইনআই ফাইলগুলি ব্যবহার করা তার অন্যতম কারণ। এক বাক্যে: আমি আমার পুরানো / আপনার সমাধান থেকে দূরে সরে যাওয়ার এবং যথাসম্ভব কোর এবং কোডেক্সের কাছাকাছি যাওয়ার চেষ্টা করি। আমার সমস্যাটি হ'ল আমি চাইল্ড থিম থেকে একটি ফাংশন বিতরণ করতে পারছি না, কারণ আমার থিমগুলি ফাংশন.এফপি ফাইলের (বা কাস্টম / ফ্রেমওয়ার্কের টেম্পলেট ট্যাগগুলির বিষয়ে কথা বলছে না) আমার বুটস্ট্র্যাপ থেকে কোনও ক্লাস বা অন্য কোনও সরঞ্জাম উপলব্ধ নেই।
কায়সার

আপডেট উত্তর দেখুন।
স্ক্রিবু

আমিও কিউ আপডেট করেছি। ২/৩ টি উত্তর পড়ার পরে একই উত্সটিতে আমার দিকে ইঙ্গিত করেছে (থিম্যাটিক, আপনার সম্পাদনার আগে) আমি অনুভব করি যে কেবল "জাস্টিন টডলক" অন্তর্ভুক্ত করার পদ্ধতি রয়েছে তবে আমি নিশ্চিত হতে চাই।
কায়সার

2
আপনি যদি সেখানে যাচ্ছেন, অতিরিক্ত ক্রিয়া নিয়ে বিরক্ত করবেন না। কেবলমাত্র_সেটআপ_থমে হুক করুন
অটো

0

functions.phpশিশু থিমের ফাইলটিতে আপনি কেন পিতামাতার থিমের ফাইল অন্তর্ভুক্ত করবেন না functions.php:

শিশু থিমের functions.phpফাইলটিতে:

if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( TEMPLATEPATH . '/functions.php' ) )
            include( TEMPLATEPATH . '/functions.php' );

// code of child theme's functions.php file continues here

এইভাবে, পিতামাতার থিমের functions.phpফাইলটি পরিবর্তন করা হয় না (কখনও কখনও এটি গুরুত্বপূর্ণ)।


প্রশ্নটিতে উল্লিখিত হয়েছে: "অন্য কথায়: আমি কীভাবে আমার সন্তানের থিমগুলি ফাংশন.এফপি ফাইলটি পরিষ্কার রাখতে পারি, তবে পিতামাতার থিমগুলি বুটস্ট্র্যাপটি সম্পন্ন করেছি?" আরও ভাল: আমি কোনও ফাংশন.এফপি ফাইলের ভেতর থেকে কল এড়ানো কীভাবে করব? কেন: লোকেরা কেবলমাত্র প্রত্যেকটি বর্জ্যকে টুকরো টুকরো করার জন্য ব্যবহৃত হয় যা তারা সেখানে টেম্পলেট ফাইলগুলিতে রাখতে চায় না। সুতরাং একটি উচ্চ সম্ভাবনা আছে যে কেউ দুর্ঘটনাক্রমে কিছু লাইন মুছে ফেলে। আমার অভিজ্ঞতা: কেউই মন্তব্য, রিডমি বা ডকুমেন্টেশন সত্যই পড়ে না।
কায়সার

0

আমার আগেও একই রকম সমস্যা ছিল এবং আমি সন্তানের মধ্যে যে ফাইলগুলি বা ফাংশনগুলি ব্যবহার করতে চাইছি তার ঠিক পরে বাবা-মায়ের অতিরিক্ত খালি "চাইল্ড-ফাংশন.এফপি" তৈরি করে এবং "ফাংশন.এফপি" (পিতামাতারও) অন্তর্ভুক্ত করে আমি এটি ঠিক করেছি, তারপরে চাইল্ড থিমে আমি একটি "চাইল্ড-ফাংশন.এফপি" ফাইল তৈরি করি এবং সেখানেই আমি শিশু ফাংশনগুলি অনুকরণ করতে পারি। পিপিএপ চালানোর পরে এটি কোনও মার্জিত সমাধান নয় তবে কাজটি করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.