চাইল্ড থিমে জাভাস্ক্রিপ্ট ফাইলগুলি কীভাবে ওভাররাইড করা যায়?


35

আমি প্যারেন্ট থিমটিতে কিছু জাভাস্ক্রিপ্ট ফাইল লোড করছি। মূল থিমের পথটি হ'ল:

scripts > custom.js

চাইল্ড থিমে, আমি একই পথটি তৈরি করছি ( scripts > custom.js) এবং custom.jsফাইলের অভ্যন্তরে কিছু jQuery পরিবর্তন করছি ।

সমস্যাটি হচ্ছে পরিবর্তনগুলি প্রয়োগ করা হচ্ছে না। চাইল্ড থিমটিতে এই ফাইলগুলিতে পরিবর্তন আনার কি ভুল উপায়?


1
মূল থিম কী? স্ক্রিপ্টগুলি কীভাবে পিতামহীন থিম দ্বারা ডাকা হচ্ছে ?
চিপ বেনেট

উত্তর:


51

চাইল্ড থিমগুলি কেবল পিএইচপি ফাইলগুলিকে ওভাররাইড করে (যেমন শিরোনাম.এফপি) যা get_template_part বা get_header ইত্যাদির মতো ফাংশনগুলির সাথে অন্তর্ভুক্ত থাকে etc.

ওয়ার্ডপ্রেসে স্ক্রিপ্ট যুক্ত করার সঠিক উপায় হ'ল wp_enqueue_script । যদি আপনার পিতামাত থিম এটি ব্যবহার করে তবে আপনি ডাব্লুপি_ডেকিউ_সক্রিপ্ট ব্যবহার করে এবং আপনার নিজের তৈরি করে জেএস ফাইলগুলি ওভাররাইড করতে পারেন ।

তাই ভালো...

<?php
// hook in late to make sure the parent theme's registration 
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
    wp_dequeue_script('parent_theme_script_handle');
    wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}

যদি মূল থিমটি wp_enqueue_script ব্যবহার না করে তবে সম্ভবত স্ক্রিপ্টগুলি প্রতিধ্বনিত করার জন্য এটি সম্ভবত wp_head (বা wp_footer) এ জড়িত। সুতরাং আপনি স্ক্রিপ্টগুলি প্রতিধ্বনিত করে এমন ফাংশনগুলি থেকে মুক্তি পাওয়ার জন্য মুছে ফেলা_অ্যাকশন ব্যবহার করবেন এবং তারপরে আপনার নিজের স্ক্রিপ্ট সজ্জিত করুন

স্ক্রিপ্টটি যদি টেম্পলেট ফাইলটিতে শক্তভাবে কোড করা থাকে তবে আপনাকে স্ক্রিপ্ট ট্যাগ ছাড়াই আপনার শিশু থিমের সেই টেম্পলেট ফাইলটি প্রতিস্থাপন করতে হবে।

যদি তারা wp_enqueue_script কলগুলি ব্যবহার করে যা get_stylesheet_directory_uri ব্যবহার করে , তবে আপনাকে কিছু করার দরকার নেই। যেহেতু এটি ঘটছে না, তাই আপনাকে কেবল থমকে গিয়ে থিম লেখক কী করেছে তা দেখতে হবে।


2
যদি পিতা বা মাতা থিম ব্যবহার সারিবদ্ধ স্ক্রিপ্ট get_stylesheet_directory_uri, তারপর সন্তান থিম হবে আছে সব স্ক্রিপ্ট এইভাবে enqueued অনুরূপ, কারণ অন্যথায় তারা খুঁজে পাওয়া যেতে woun't। চাইল্ড থিমটিতে কোনও পৃথক ফাইল রয়েছে কিনা তা পরীক্ষা করার জন্য get_stylesheet_directory_uri তে কোনও ফ্যালব্যাক প্রক্রিয়া নেই এবং প্রয়োজনে পিতামাতার থিমের ফাইলটিতে ফিরে যান।

কোডেক্স থেকে: "প্রথম পৃষ্ঠায় স্টাইল বা স্ক্রিপ্টগুলি সজ্জিত করার জন্য wp_print_script ব্যবহার করা উচিত নয়। পরিবর্তে wp_enqueue_script ব্যবহার করুন। " কোডেক্স.ওয়ার্ডপ্রেস.আর.
খ্রিস্টান লেসকিউয়ার

এটি কখন লেখা হয়েছিল তা মনে রাখবেন: দু'বছর আগে। এর আগে wp_enqueue_scriptsকেবল সামনের প্রান্তে স্ক্রিপ্টগুলি সজ্জিত করতে ব্যবহৃত হত। আপডেট করা হয়েছে। আপনি যদি পুরানো কিছু দেখতে পান তবে সম্পাদনা করতে দ্বিধা বোধ করবেন।
chrisguitarguy

4
অনুগ্রহ করে নোট করুন যে প্যারেন্ট থিম এনকুইয়ের পরে আপনার ডিকুইটি ঘটেছিল তা নিশ্চিত করতে আপনাকে একটি দেরী অগ্রাধিকার (উদাহরণস্বরূপ 100) নির্ধারণ করতে হতে পারে । কোডেক্স.ওয়ার্ডপ্রেস.আর্গ.add_action( 'wp_enqueue_scripts', 'wpse26822_script_fix', 100 );
wp_dequeue_script

4
২০১ for-র জন্য আপডেট: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ২৩৫০17১179 / অনুসারে wp_deregister_script('parent-script-handle');প্যারেন্ট স্ক্রিপ্টটি সম্পূর্ণ অপসারণ করতে আমাদেরও ব্যবহার করতে হবে। আসলে, এটি ছাড়া এটি আমার পক্ষে কাজ করে না। ডাব্লুপি 4.6.1
ফিলহো

1

কিছু ক্ষেত্রে অ্যাড-অ্যাকশন এবং wp_enqueue_script ফাংশন কলগুলি উভয়কেই অগ্রাধিকার দেওয়া গুরুত্বপূর্ণ:

add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
    wp_dequeue_script('storefront-navigation');
    wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}

এই ক্ষেত্রে, wp_enqueue_script স্ক্রিপ্টগুলি অভিভাবকরা ২০১২০২০66 (তারিখ) এর অগ্রাধিকার সহ আহ্বান করেছিলেন এবং তাই এই ক্রিয়াটি কেবলমাত্র বৃহত্তর একটি অগ্রাধিকারের সাথে যুক্ত করা হয়েছে যাতে এটি তাত্ক্ষণিকভাবে উপযুক্ত হবে। তারপরে, এনকুই স্টেটমেন্টটি এরপরে আসে যা পুরানোটি শনাক্ত করার পরে এটি লোড হয় তা নিশ্চিত করার পরে এটির পরে বাস্তবে অগ্রাধিকার দেওয়া হয়। সত্য, এক্ষেত্রে এটিও গুরুত্বপূর্ণ কারণ এটি উল্লেখ করে যে এটি ফুটারে সজ্জিত করা উচিত, যেখানে প্যারেন্ট স্ক্রিপ্টটি প্রথম সন্নিবেশিত হয়েছিল।

এছাড়াও, আমি এটি পুরোপুরি ব্যাখ্যা করতে পারছি না, তবে আমি লক্ষ্য করেছি যে আপনি যদি প্রাথমিক স্ক্রিপ্টটি সজ্জিত হওয়ার সাথে সাথেই চিহ্নিত করার বিষয়ে সতর্ক হন তবে মনে হয় আপনি কার্যকরভাবে এটিকে প্রথম স্থানে লোড হওয়া থেকে আটকাতে পারবেন।


1
ফাংশনটির wp_enqueue_scriptকোনও অগ্রাধিকারের পরামিতি নেই, এটি কেবলমাত্র একটি সংস্করণ নম্বর যা ক্যোয়ারী স্ট্রিং হিসাবে পাথের শেষদিকে সংযুক্ত করা হয়েছে। ক্যাচিং নির্বিশেষে ক্লায়েন্টকে সঠিক সংস্করণটি প্রেরণ করা হয়েছে তা নিশ্চিত করার জন্য এই প্যারামিটারটি ব্যবহার করা হচ্ছে [...]
এমিল বার্গারন

1

আপনার নিজের সংস্করণটি নিবন্ধ করার আগে wp_deregister_script কল করুন


1
কেন? এটি কেবল তখনই প্রয়োজন যখন আপনি একই হ্যান্ডেলটি ব্যবহার করছেন - এমন কিছু যা আপনাকে করতে হবে না। আপনার সম্ভবত এমনকি করাও উচিত নয়, কারণ যার ডিবাটটি স্পষ্ট তার কোডটি ডিবাগ করা সহজ।
ফুসিয়া

1
// enqueue your required script file
add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override');
function your_child_theme_js_file_override(){
    wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) );
}

// dequeue your required script file
function your_child_theme_js_file_dequeue() {
   wp_dequeue_script( 'parent_theme_script_handle' );
}
add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.