আমি কীভাবে সমস্ত এনকুইড স্ক্রিপ্ট এবং শৈলীর তালিকা পেতে পারি?


12

আমি একটি প্লাগইন তৈরি করছি এবং আমি অন্যান্য প্লাগইন দ্বারা ব্যবহৃত সমস্ত স্ক্রিপ্ট এবং সিএসএসের তালিকা পেতে চাই।

এটি আমার কাজ:

function crunchify_print_scripts_styles() {    
    $result = [];
    $result['scripts'] = [];
    $result['styles'] = [];

    // Print all loaded Scripts
    global $wp_scripts;
    foreach( $wp_scripts->queue as $script ) :
       $result['scripts'][] =  $wp_scripts->registered[$script]->src . ";";
    endforeach;

    // Print all loaded Styles (CSS)
    global $wp_styles;
    foreach( $wp_styles->queue as $style ) :
       $result['styles'][] =  $wp_styles->registered[$style]->src . ";";
    endforeach;

    return $result;
}
add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');

আমি একটি ভেরিয়েবলের মধ্যে ফেরত মান পেতে চাই।

আমি এটি চেষ্টা করেছি:

$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );

এবং এটি আমার ফলাফল:

NULL

আমি যদি echoপ্রতিটি foreachলুপের ভিতরে লিখি , আমি সঠিক ফলাফল পেয়েছি তবে এই মানগুলি কোনও ভেরিয়েবলের মধ্যে কীভাবে সংরক্ষণ করব?

[সম্পাদনা]

একটি প্লাগিনেমের ভিতরে আমার কোড যা খুব বেশি কাজ করে না

/**
 *  Get all scripts and styles from Wordpress
 */
function print_scripts_styles() {

    $result = [];
    $result['scripts'] = [];
    $result['styles'] = [];

    // Print all loaded Scripts
    global $wp_scripts;
    foreach( $wp_scripts->queue as $script ) :
        $result['scripts'][] =  $wp_scripts->registered[$script]->src . ";";
    endforeach;

    // Print all loaded Styles (CSS)
    global $wp_styles;
    foreach( $wp_styles->queue as $style ) :
        $result['styles'][] =  $wp_styles->registered[$style]->src . ";";
    endforeach;

    return $result;
}

add_action( 'wp_head', 'wp_rest_assets_init');

/**
 * Init JSON REST API Assets routes.
 *
 * @since 1.0.0
 */
function wp_rest_assets_init() {


    $all_the_scripts_and_styles = print_scripts_styles();

    if ( ! defined( 'JSON_API_VERSION' ) &&
         ! in_array( 'json-rest-api/plugin.php', get_option( 'active_plugins' ) ) ) {
             $class = new WP_REST_Assets();
             $class::$scriptsAndStyles = $all_the_scripts_and_styles;
             add_filter( 'rest_api_init', array( $class, 'register_routes' ) );
    } else {
        $class = new WP_JSON_Menus();
        add_filter( 'json_endpoints', array( $class, 'register_routes' ) );
    }
}


add_action( 'init', 'wp_rest_assets_init' );

1
do_actionকোনও ফলাফল ফেরত দেয় না এবং তদ্ব্যতীত, ক্রিয়াটি ইতিমধ্যে ঘটেছে wp_enqueue_scripts... একটি গ্লোবাল তৈরি করা সহজ, যেমন। global $crunchifyenqueued; $crunchifyenqueued = $result;তারপরে ভেরিয়েবলটি অ্যাক্সেস করতে আবার আপনার পরবর্তী ফাংশনে গ্লোবাল কল করুন।
মজিক

আপনার উত্তরের জন্য ধন্যবাদ, তবে এটি সমস্যার সমাধান করেনি, var_dump ($ crunchifenqueued) এর প্রতিক্রিয়া হ'ল "NULL"।
এডুয়ার্ড কম্বো

তাহলে কেন ব্যবহার করবেন না apply_filters? আপনি এটি থেকে সহজেই রিটার্ন মান পেতে পারেন।
মজিক

আমি ইতিমধ্যে চেষ্টা করেছি, আমি একটি পরিবর্তনশীল মধ্যে ফলাফল সংরক্ষণ করতে পারবেন না।
এডুয়ার্ড কম্বো

অবশ্যই আপনি একটি গ্লোবাল ব্যবহার করে করতে পারেন?
মজিক

উত্তর:


11

do_actionবেশ কাজ করে না। আপনি যখন do_action('crunchify_print_scripts_styles')ডাব্লুপি কল করেন তখন এটির জন্য নিবন্ধিত ক্রিয়াকলাপগুলির তালিকা এবং যে কোনও হুক সংযুক্ত থাকে তার ফিল্টারগুলি দেখায় crunchify_print_scripts_stylesএবং তারপরে সেই ফাংশনগুলি চালায়।

এবং আপনি সম্ভবত এটি মুছে ফেলতে চান:

add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');

... কারণ আপনি নিজের ফাংশনের রিটার্ন ফলাফল পেতে সক্ষম নন।

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

আপনার কোডটি এভাবে পুনরায় কাজ করা উচিত ...

function crunchify_print_scripts_styles() {

    $result = [];
    $result['scripts'] = [];
    $result['styles'] = [];

    // Print all loaded Scripts
    global $wp_scripts;
    foreach( $wp_scripts->queue as $script ) :
       $result['scripts'][] =  $wp_scripts->registered[$script]->src . ";";
    endforeach;

    // Print all loaded Styles (CSS)
    global $wp_styles;
    foreach( $wp_styles->queue as $style ) :
       $result['styles'][] =  $wp_styles->registered[$style]->src . ";";
    endforeach;

    return $result;
}

তারপরে আপনার থিমের মধ্যে:

print_r( crunchify_print_scripts_styles() );

... আপনাকে ডিবাগিংয়ের জন্য ফলাফলগুলি দেখাবে, বা অবশ্যই ...

$all_the_scripts_and_styles = crunchify_print_scripts_styles();

... আপনাকে তালিকাটি কারসাজি করতে দেবে।

থিমটিতে এটিকে কল করা নিশ্চিত করে যে সমস্ত স্ক্রিপ্ট এবং শৈলী সমাপ্ত হওয়ার পরে আপনি এটি কল করেছেন।

আপনার প্লাগইন থেকে এটিকে কল করতে, wp_enqueue_script এর চেয়ে পরে চালিত যে কোনও হুকের সাথে এটি সংযুক্ত করুন, যেমন উপরে উল্লিখিত হিসাবে wp_head:

add_action( 'wp_head', 'wpse_233142_process_list');

function wpse_233142_process_list() {

    $all_the_scripts_and_styles = crunchify_print_scripts_styles();
    // process your array here

}

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

তারপরে $all_the_scripts_and_styles = crunchify_print_scripts_styles();আপনার প্লাগইনটির ভিতরে রাখুন! স্যুইটের উত্তরটি ট্যুইক করলেন।
অ্যান্ডি ম্যাকোলে-ব্রুক

এটি কাজ করে না, স্ক্রিপ্ট এবং শৈলী উভয়ই খালি। দেখে মনে global wp_scripts global wp_stylesহচ্ছে একেবারে খালি। তবে তারা একটিdo_action or apply_filters
এডুয়ার্ড কম্বো

wp_enqueue_scriptsআমি মূলত প্রস্তাবিত ক্রিয়াটির পরে কি আপনি নিজের ফাংশনটি কল করছেন ?
অ্যান্ডি ম্যাকোলে-ব্রুক 15

উত্তরটি আরও পরিষ্কার করার জন্য আমি প্রসারিত করেছি।
অ্যান্ডি ম্যাকোলে-ব্রুক 15

7

এনকুইড স্ক্রিপ্ট এবং স্টাইলগুলিতে সময়োপযোগীভাবে এবং যথাযথভাবে অ্যাক্সেসের জন্য আপনি ব্যবহার wp_print_scriptsএবং wp_print_stylesক্রিয়াগুলি ব্যবহার করতে পারেন , কারণ নথিগুলিতে স্ক্রিপ্ট এবং শৈলী অন্তর্ভুক্ত করার আগে এই ক্রিয়াগুলি সর্বশেষ ঘটনা এবং কারণ, সর্বশেষ ইভেন্ট যেখানে পরিবর্তনগুলি বা স্টাইলগুলিতে প্রভাব ফেলতে পারে এবং নথিতে অন্তর্ভুক্ত স্ক্রিপ্টগুলি।$wp_styles$wp_scripts

তাই, তারা ঘটনা যেখানে আপনি আরো আত্মবিশ্বাসী যে হতে পারে $wp_stylesএবং $wp_scriptsস্ক্রিপ্ট এবং শৈলী কার্যকরভাবে নথিতে অন্তর্ভুক্ত থাকে।

add_action( 'wp_print_scripts', 'cyb_list_scripts' );
function cyb_list_scripts() {
    global $wp_scripts;
    $enqueued_scripts = array();
    foreach( $wp_scripts->queue as $handle ) {
        $enqueued_scripts[] = $wp_scripts->registered[$handle]->src;
    }
}
add_action( 'wp_print_styles', 'cyb_list_styles' );
function cyb_list_styles() {
    global $wp_styles;
    $enqueued_styles = array();
    foreach( $wp_styles->queue as $handle ) {
        $enqueued_styles[] = $wp_styles->registered[$handle]->src;
    }
}

যদি আপনি $enqueued_scriptsঅ্যাডনকে $enqueued_stylesগ্লোবাল ভেরিয়েবল হিসাবে ঘোষণা করেন (বা অন্য কোনও বৈধ সুযোগ, উদাহরণস্বরূপ আপনি এটি কোনও পদ্ধতির সম্পত্তিতে সঞ্চয় করতে পারেন), আপনি পরবর্তী ক্রিয়ায় স্ক্রিপ্ট এবং শৈলীর তালিকায় অ্যাক্সেস করতে পারেন।

উদাহরণস্বরূপ (কেবলমাত্র একটি দ্রুত উদাহরণ):

global $enqueued_scripts;
global $enqueued_styles;

add_action( 'wp_print_scripts', 'cyb_list_scripts' );
function cyb_list_scripts() {
    global $wp_scripts;
    global $enqueued_scripts;
    $enqueued_scripts = array();
    foreach( $wp_scripts->queue as $handle ) {
        $enqueued_scripts[] = $wp_scripts->registered[$handle]->src;
    }
}
add_action( 'wp_print_styles', 'cyb_list_styles' );
function cyb_list_styles() {
    global $wp_styles;
    global $enqueued_styles;
    $enqueued_styles = array();
    foreach( $wp_styles->queue as $handle ) {
        $enqueued_styles[] = $wp_styles->registered[$handle]->src;
    }
}

add_action( 'wp_head', function() {
    global $enqueued_scripts;
    var_dump( $enqueued_scripts );
    global $enqueued_styles;
    var_dump( $enqueued_styles );
} );

0

আপনি যদি সত্যই সমস্ত স্টাইলের একটি তালিকা পেতে চান তবে আপনি নতুন 'স্ক্রিপ্ট_লোডার_ট্যাগ' ফিল্টারটি ব্যবহার করতে পারেন (সংস্করণ ৪.১)

"Wp_print_scriptts" হ'ল:

অ্যাডমিন-হেডার.এফপি এবং 'ডাব্লুপি_হ্যাড' হুক কল করেছে।

অর্থাৎ এটি ফুটারে স্ক্রিপ্টগুলি দেখায় না।

তথ্যসূত্র:

ওয়ার্ডপ্রেস স্ক্রিপ্টগুলিতে ডিফার এবং অ্যাসিঙ্ক বৈশিষ্ট্য যুক্ত করুন

wp_print_scripts


কীভাবে এটি ব্যবহার করবেন আপনার কাছে একটি উদাহরণ রয়েছে?
লনিক্স

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