পাদলেখের মূল jQuery এনক্যু?


22

আমার এই functions.phpফাইলটিতে এটি আছে এবং আমি ফুটারে লোড করার জন্য jQuery পেতে পারি না। includesপাদচরণ জরিমানা ফাইল লোড যদিও। আমার আর কী করা দরকার?

function starter_scripts() {
    wp_enqueue_style( 'starter-style', get_stylesheet_uri() );

    wp_enqueue_script( 'jquery', '', '', '', true );

    wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', '', '', true );
}
add_action( 'wp_enqueue_scripts', 'starter_scripts' );

পারফরম্যান্সের কারণে যদি আপনি এটি করছেন, তবে আপনি deferপরিবর্তে আপনার স্ক্রিপ্ট ট্যাগগুলি যুক্ত করার বিষয়ে বিবেচনা করতে পারেন : ম্যাথহওয়ার্ন.মে
ক্যাসিঙ্ক-

ডাব্লুপি এখানে দেব, আমি এটি মোকাবেলার জন্য একটি প্লাগইন তৈরি করেছি: wordpress.org/plugins/jquery-manage
রেমজি ক্যাভদার

উত্তর:


23

এটি করতে আপনাকে প্রথমে আপনার jQuery স্ক্রিপ্টটি নিবন্ধন করতে হবে এবং তারপরে আবার নিবন্ধন করতে হবে। আপনি যদি jQuery ব্যবহার করেন তবে ওয়ার্ডপ্রেসের সাথে আসে তবে নীচের ফাংশনটি যা আপনি খুঁজছেন তা নিম্নলিখিত।

function starter_scripts() {
    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', includes_url( '/js/jquery/jquery.js' ), false, NULL, true );
    wp_enqueue_script( 'jquery' );

    wp_enqueue_style( 'starter-style', get_stylesheet_uri() );
    wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', '', '', true );
}
add_action( 'wp_enqueue_scripts', 'starter_scripts' );

আপনি যদি গুগল সিডিএন হোস্টেড সংস্করণ jQuery ব্যবহার করেন তবে আমাকে জানাবেন আমি গুগল সিডিএন URL এর জন্য এই কোডটি পরিবর্তন করব।


5
আপনি কি বোঝাতে চেয়েছেন? সমাধানটি jQueryটিকে পাদলেখায় নিয়ে যাওয়া সম্পর্কে।
রবার্ট হু

2
ব্যাকএন্ড jQuery এ পরিবর্তন এড়াতে আপনার অবশ্যই_সেস্কিন () পরীক্ষা করে দেখতে হবে, সর্বোপরি আমাদের সাইটগুলির সম্মুখভাগটি কেবলমাত্র অনুকূল করা দরকার :)
টিম ম্যালোন

1
@ টিমমালোন - আসলে, আপনি করবেন না - wp_enqueue_scriptsকেবল admin_enqueue_scriptsপিছনের প্রান্তে ব্যবহার করার সময় কেবল শেষ প্রান্তে ব্যবহার করা হবে
dev_masta

1
আমি মনে করি এই সমাধানটি আসলে ভয়ঙ্কর। এর সাথে কি সংস্করণ ট্যাগগুলি মুছে ফেলা হয়। এই স্টার্টার-স্টাইলটি কী এবং এর মধ্যে রয়েছে.মিন.জেএস এবং এটি jQuery এর সাথে কী সম্পর্কযুক্ত।
নেক্সট জেনেমস

2
@redanimalwar স্টার্টার-স্টাইল এবং ফাইলগুলি সরাসরি প্রশ্ন থেকে আসে।
তেহলিভি

43

এখানে আরও একটি বিকল্প রয়েছে যা ডি-রেজিস্ট্রেশন এবং পুনরায় নিবন্ধন করা এড়ানো হবে:

/**
 * Move jQuery to the footer. 
 */
function wpse_173601_enqueue_scripts() {
    wp_scripts()->add_data( 'jquery', 'group', 1 );
    wp_scripts()->add_data( 'jquery-core', 'group', 1 );
    wp_scripts()->add_data( 'jquery-migrate', 'group', 1 );
}
add_action( 'wp_enqueue_scripts', 'wpse_173601_enqueue_scripts' );

এই সমাধানটি ওয়ার্ডপ্রেস কোরটিকে নীতি নির্ধারণ করে নকলgroup করে 1, যা ওয়ার্ডপ্রেস নির্ধারণ করে যে কোনও স্ক্রিপ্ট ফুটারে থাকা উচিত কিনা ( 1এটির জন্য আমি যুক্তি সম্পর্কে অবগত নই , যেমন @ জগ্রাপ মন্তব্যগুলিতে উল্লেখ করেছে যে এটি কিছুটা স্বেচ্ছাচারী বলে মনে হয়)।


1
মজাদার. ফুটারে স্ক্রিপ্টগুলি স্থানান্তর করতে wp_register_scriptব্যবহারগুলির মতো মনে হচ্ছে add_data( $handle, 'group', 1 )core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/… - আপনি কেন এটি প্রসারিত করতে পারেন? আপনার কোডটিতে দৃষ্টিনন্দন করা, 'গ্রুপ' কিছুটা স্বেচ্ছাচারী বলে মনে হচ্ছে। তবে আমি কোর . trac.wordpress.org/browser/tags/4.5/src/wp-includes/… এ দেখতে পাচ্ছি যে এটি do_itemপরে ডাব্লুপিএস স্ক্রিপ্ট-> এ কীভাবে ব্যবহৃত হয় । যেভাবেই হোক, এটি সর্বনিম্ন ধ্বংসাত্মক উত্তর বলে মনে হবে।
jgraup

2
আমি আশা করি কেউ এই তিনটি উত্তরের উপর আরও মন্তব্য করতে পারে। সবগুলি আলাদা এবং ডাব্লুপিপির কিছু জ্ঞানের প্রয়োজন। যেহেতু গুগলের এই স্ক্রিপ্টগুলি ভাঁজের নীচে থাকা দরকার, এটি একটি গুরুত্বপূর্ণ বিষয়।
ssaltman

2
সেরা উত্তর! দ্রষ্টব্য : এটি ওয়ার্ডপ্রেস ৪.২.০ থেকে কার্যকর এবং এটি হুক 'wp_enqueue_scriptts' কলব্যাকে
ফাংশন.এফপি ব্যবহার করুন

হাই আমি উপরোক্ত পদ্ধতির চেষ্টা করেছিলাম, কিন্তু এটি কার্যকর হয়নি। কেউ সাহায্য করতে পারেন?
iSaumya

1
এটা খুবই ভালো! তোমাকে অনেক ধন্যবাদ. তবে, লক্ষ্য করার মতো বিষয় যেমনটি হলিভিতে বলা হয়েছে - ডাব্লুপি jQuery এর একটি পুরানো সংস্করণ ব্যবহার করে - নিবন্ধভুক্তকরণ এবং একটি নতুন সংস্করণ নিবন্ধভুক্ত করার বিষয়টি বিবেচনা করুন।
স্কোলাইন্ড

18

একটি ভাল সমাধান:

add_action( 'wp_default_scripts', 'move_jquery_into_footer' );

function move_jquery_into_footer( $wp_scripts ) {

    if( is_admin() ) {
        return;
    }

    $wp_scripts->add_data( 'jquery', 'group', 1 );
    $wp_scripts->add_data( 'jquery-core', 'group', 1 );
    $wp_scripts->add_data( 'jquery-migrate', 'group', 1 );
}

কেন এটি আরও ভাল তবে গ্রহণযোগ্য উত্তর আইএমও

  1. এটি একেবারে মূল পর্যায়ে পরিবর্তিত হয় পরবর্তী পর্যায়ে নয় যেখানে অন্যান্য জিনিস ইতিমধ্যে এর সাথে গোলমাল হতে পারে।
  2. সংস্করণটির স্ট্রিং এটি রাখে এবং সরানো হয়নি!
  3. এটা তোলে নিবন্ধমুক্ত করে একটি স্ক্রিপ্ট reregister না কিন্তু এটা ঠিক মূলত একই হয় যেন স্ক্রিপ্ট সাথে নিবন্ধিত করা হবে গ্রুপ মান সেট করে $footer = true

অ্যাডমিনকে এটি না করার বিষয়ে

যদি প্লাগইনগুলি ডাব্লুপি_হেডগুলিতে ইনলাইন জ্যাকেই যুক্ত করে তবে জ্যাকুয়ারিটি সেই সময়ে লোড না হওয়াতে এটি ব্যর্থ হয়ে যায়, সুতরাং আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার সাইটটিতে কয়েক মিলিয়ন সম্পাদনা না করে এবং আপনি আপনার প্রশাসককে অপ্টিমাইজ করার চেষ্টা না করা পর্যন্ত আপনাকে এড়ানো উচিত। এটি ফ্রন্টএন্ডের ক্ষেত্রেও সত্য তাই আপনার পক্ষে খারাপ কোডিং থিম বা প্লাগইনগুলি সন্ধান করা উচিত যা ইনলাইন jQuery কোড ব্যবহার করে মাথায় jquery ধরে। ডাব্লুপি এবং প্লাগইনগুলি অন্যান্য স্ক্রিপ্টগুলি অ্যাডমিন হেডে জেস্কুরিতে Deps এ নিবন্ধভুক্ত করে যাতে এটি যাই হোক না কেন আমার মনে হয়।

এটি সম্পর্কে কাজ করে না

আপনার সচেতন হওয়া দরকার যে যদি অন্য কোনও স্ক্রিপ্টের মাথায় বোঝা হয়ে থাকে যেটির নির্ভরতাতে jQuery রয়েছে তবে এটি নিজেই ঠিক আগে মাথাতে jQuery লোড তৈরি করবে। এবং এটি ভাল এবং প্রত্যাশিত, ডাব্লুপি_ইনেকু সিস্টেমটি বিদ্যমান থাকার কারণ। এর অর্থ আপনি শীঘ্রই শিখবেন যদি আপনি কয়েকটি প্লাগইন ব্যবহার করেন যেগুলির মধ্যে একটিতে মাথার জন্য jquery প্রয়োজন। দুর্ভাগ্যক্রমে, এনকুইড স্ক্রিপ্টগুলির জন্য এটি ডিফল্ট।

র‌্যাডিক্যাল সলিউশন

আমি মনে করি এটি যে কোনও ইনলাইন জেএসকে ব্রেক করবে যা jquery ধরে নেয় তবে এটি বিরল হওয়া উচিত। এটি ফুটারে সমস্ত স্ক্রিপ্টকে কীভাবে সজ্জিত করা হবে তা নির্বিশেষে বাধ্য করবে ।

add_action( 'wp_enqueue_scripts', 'js_to_footer' );

function js_to_footer() {
  remove_action( 'wp_head', 'wp_print_scripts' );
  remove_action( 'wp_head', 'wp_print_head_scripts', 9 );
  remove_action( 'wp_head', 'wp_enqueue_scripts', 1 );
}

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

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

4
অন্যান্য উত্তরগুলি jQuery মাথায় জোর করে অন্যদের স্ক্রিপ্ট সম্পর্কে কিছুই উল্লেখ করে না, আসলে আমার উত্তর বিভ্রান্তি এমন লোকদের থেকে সরিয়ে নিয়ে যায় যারা জানেন না যে এটি কেন কাজ করছে না। উত্তরগুলির উত্তরগুলির মধ্যে
কোনওটিতেও

এই কোডটি (উপরের উত্তরের কোড হিসাবে) আমাকে একটি 500 ত্রুটি ফিরিয়ে দিয়েছে। আমার ওয়ার্ডপ্রেস রয়েছে 4.9.9
মার্কো পানিচি

বিশ্বাস করা শক্ত যে এই কোডটি 500 তৈরি করছে, আপনি সম্ভবত আপনার কোডটিতে এটি প্রয়োগ করতে ভুল করেছেন। এটি জিজ্ঞাসা করার জন্য সত্যই সঠিক জায়গা নয় এবং আপনার পুরানো ডাব্লুপি সংস্করণ খুব কমই যথেষ্ট তথ্য।
নেক্সটজেনেমিস

2

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

কেন এখনও অন্য jQuery আপডেটের / পরিচালক / বিকাশকারী / ডিবাগিং সরঞ্জাম?

কারণ বিকাশকারী কোনও সরঞ্জামই আপনাকে jQuery এবং / অথবা jQuery মাইগ্রেটের একটি নির্দিষ্ট সংস্করণ নির্বাচন করতে দেয় না। উভয় সংকুচিত minified / উত্পাদন এবং সঙ্কুচিত / উন্নয়ন সংস্করণ সরবরাহ করে। নীচে বৈশিষ্ট্য দেখুন!

✅ কেবল সামনের প্রান্তে মৃত্যুদন্ড কার্যকর করা, ওয়ার্ডপ্রেস অ্যাডমিন / ব্যাকএন্ড এবং ডাব্লুপি কাস্টমাইজারের সাথে হস্তক্ষেপ করে না (সামঞ্জস্যতার কারণে) দেখুন: https://core.trac.wordpress.org/ticket/45130 এবং https: // কোর। trac.wordpress.org/ticket/37110

J jQuery এবং / অথবা jQuery মাইগ্রেট চালু / বন্ধ করুন

J jQuery এবং / অথবা jQuery মাইগ্রেটের একটি নির্দিষ্ট সংস্করণ সক্রিয় করুন

এবং আরো অনেক কিছু! কোডটি মুক্ত উত্স, যাতে আপনি এটি অধ্যয়ন করতে পারেন, এটি থেকে শিখতে এবং অবদান রাখতে পারেন।


প্রায় সবাই ভুল হ্যান্ডেল ব্যবহার করে

ওয়ার্ডপ্রেস আসলে jquery- কোর হ্যান্ডেল ব্যবহার করে, jquery নয়:

https://github.com/WordPress/WordPress/blob/f84ab5e19f0038a3abec71821c9b8f47a4272942/wp-includes/script-loader.php#L1017

// jQuery
$scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.12.4-wp' );
$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.12.4-wp' );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.4.1' );

JQuery হাতল লোড শুধু একটি ওরফে হয় jQuery কোর সঙ্গে jQuery স্থানান্তরণের

alias লেখা সম্পর্কে আরও তথ্য দেখুন: wp_register_script একাধিক শনাক্তকারী?

এটি করার সঠিক উপায়

নীচে আমার উদাহরণে আমি অফিসিয়াল jQuery সিডিএন https://code.jquery.com এ ব্যবহার করি আমি স্ক্রিপ্ট_লোডার_ট্যাগও ব্যবহার করি যাতে আমি কিছু সিডিএন বৈশিষ্ট্য যুক্ত করতে পারি।
আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

// Front-end not excuted in the wp admin and the wp customizer (for compatibility reasons)
// See: https://core.trac.wordpress.org/ticket/45130 and https://core.trac.wordpress.org/ticket/37110
function wp_jquery_manager_plugin_front_end_scripts() {
    $wp_admin = is_admin();
    $wp_customizer = is_customize_preview();

    // jQuery
    if ( $wp_admin || $wp_customizer ) {
        // echo 'We are in the WP Admin or in the WP Customizer';
        return;
    }
    else {
        // Deregister WP core jQuery, see https://github.com/Remzi1993/wp-jquery-manager/issues/2 and https://github.com/WordPress/WordPress/blob/91da29d9afaa664eb84e1261ebb916b18a362aa9/wp-includes/script-loader.php#L226
        wp_deregister_script( 'jquery' ); // the jquery handle is just an alias to load jquery-core with jquery-migrate
        // Deregister WP jQuery
        wp_deregister_script( 'jquery-core' );
        // Deregister WP jQuery Migrate
        wp_deregister_script( 'jquery-migrate' );

        // Register jQuery in the head
        wp_register_script( 'jquery-core', 'https://code.jquery.com/jquery-3.3.1.min.js', array(), null, false );

        /**
         * Register jquery using jquery-core as a dependency, so other scripts could use the jquery handle
         * see /wordpress/283828/wp-register-script-multiple-identifiers
         * We first register the script and afther that we enqueue it, see why:
         * /wordpress/82490/when-should-i-use-wp-register-script-with-wp-enqueue-script-vs-just-wp-enque
         * /programming/39653993/what-is-diffrence-between-wp-enqueue-script-and-wp-register-script
         */
        wp_register_script( 'jquery', false, array( 'jquery-core' ), null, false );
        wp_enqueue_script( 'jquery' );
    }
}
add_action( 'wp_enqueue_scripts', 'wp_jquery_manager_plugin_front_end_scripts' );


function add_jquery_attributes( $tag, $handle ) {
    if ( 'jquery-core' === $handle ) {
        return str_replace( "type='text/javascript'", "type='text/javascript' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'", $tag );
    }
    return $tag;
}
add_filter( 'script_loader_tag', 'add_jquery_attributes', 10, 2 );

0
add_action("wp_enqueue_scripts", "myscripts");

function myscripts() { 
   wp_enqueue_script( 'jquery' , '', array(), true); //true for footer
   wp_enqueue_script( 'someScript-js', 'https://domain.com/someScript.js' , '', '', true );
}

-3

আরে কেবল আপনার কোডটি এটি পছন্দ করতে পরিবর্তন করুন

function starter_scripts() {
        wp_enqueue_style( 'starter-style', get_stylesheet_uri() );
        wp_enqueue_script('jquery');
        wp_enqueue_script( 'includes', get_template_directory_uri() . '/js/min/includes.min.js', array( 'jquery' ) );
    }
    add_action( 'wp_enqueue_scripts', 'starter_scripts' );

আমি মনে করি এটি ঠিক আছে

আপনার ফাংশন.এফপি ফাইলে এই লাইনগুলি যুক্ত করুন

remove_action('wp_head', 'wp_enqueue_scripts', 1);
add_action('wp_footer', 'wp_enqueue_scripts', 5);

তারপরে এটি ফুটারে স্ক্রিপ্ট যুক্ত করে add


এটি jQuery মাথায় রাখে। ফুটারে আমার এটি দরকার
দেশি

ওহে দেশী দয়া করে সম্পাদিত উত্তরটি চেক করুন আমার মনে হয় এটি আপনাকে সহায়তা করে
অমিত মিশ্র

6
আমি নিশ্চিত যে এটি একটি ভয়ানক ধারণা - আপনি কেবল jQuery নয়, শিরোনামে স্ক্রিপ্টগুলি লোড করা থেকে কার্যকরভাবে কোনও কিছু প্রতিরোধ করেছেন এবং ডাবল-ক্রমযুক্ত স্ক্রিপ্টগুলি হতে পারে (এটি গভীরভাবে দেখেনি)। আসলে, আপনি সম্ভবত remove_action/ add_actionঅংশ প্রয়োজন কেবল যদি আপনি এটি এভাবে চালিয়ে যাচ্ছেন।
drzaus

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