วิธีการ dequeue สคริปต์และสไตล์ในธีมลูกอย่างถูกต้อง?


11

ฉันสร้างธีมผู้ปกครองและธีมลูกในโครงการของฉัน ฉันลงทะเบียน CSS และ JavaScript ในธีมหลักของฉันดังนี้:

function project_necessary_scripts() {
    //Stylesheets
    wp_register_style( 'bootstrap-css', get_template_directory_uri() .'/css/bootstrap.min.css' );
    wp_register_style( 'bootstrap-map', get_template_directory_uri() .'/css/bootstrap.css.map' );
    wp_register_style( 'project-css', get_stylesheet_uri() );

    wp_enqueue_style( 'bootstrap-css' );
    wp_enqueue_style( 'bootstrap-map' );
    wp_enqueue_style( 'project-css' );

    //JavaScripts
    wp_register_script( 'modernizr-js', get_template_directory_uri() .'/js/modernizr-2.8.3.min.js', array(), '2.8.3' );
    wp_register_script( 'project-js', get_template_directory_uri() .'/js/project.min.js', array('jquery'), '20150401', true );

    wp_enqueue_script( 'modernizr-js' );
    wp_enqueue_script( 'project-js' );
}
add_action( 'wp_enqueue_scripts', 'project_necessary_scripts' );

ตอนนี้ในชุดรูปแบบลูกของฉันฉันต้องการ dequeue สไตล์และ javascripts ดังนั้นฉันใช้รหัสต่อไปนี้:

function project_dequeue_unnecessary_scripts() {
    wp_dequeue_style( 'bootstrap-map' );
    wp_dequeue_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

แต่ที่จริงแล้วbootstrap.css.mapไฟล์ยังคงจัดคิว แต่ modernizr-js project-js ไม่โหลดดังนั้นจึงทำงานได้บางส่วน ฉันจะแก้ปัญหาอย่างไร

ฉันยังลองลำดับความสำคัญของการกระทำ:

add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts', 11 );

คำตอบ:


24

คุณใกล้กับโซลูชันมากเพราะคุณอยู่บนเส้นทางที่ถูกต้อง เพียงแค่ปรับแต่งเล็กน้อย:

มีสอง hooks กระทำดังกล่าว:

  1. wp_print_scriptsและ
  2. wp_print_styles

ดังนั้นวิธีที่คุณสามารถทำได้คือ: ขอให้แตกต่างกัน:

//Dequeue Styles
function project_dequeue_unnecessary_styles() {
    wp_dequeue_style( 'bootstrap-map' );
        wp_deregister_style( 'bootstrap-map' );
}
add_action( 'wp_print_styles', 'project_dequeue_unnecessary_styles' );

//Dequeue JavaScripts
function project_dequeue_unnecessary_scripts() {
    wp_dequeue_script( 'modernizr-js' );
        wp_deregister_script( 'modernizr-js' );
    wp_dequeue_script( 'project-js' );
        wp_deregister_script( 'project-js' );
}
add_action( 'wp_print_scripts', 'project_dequeue_unnecessary_scripts' );

และวิธีที่ถูกต้องคือการลงทะเบียนข้างๆ dequeuing ดังนั้นก่อนอื่นให้ทำการถอนออกจากพวกเขาและจากนั้นลงทะเบียนให้เหมาะสม


ตามเอกสาร : ตั้งแต่ WordPress 3.3, wp_print_scripts ไม่ควรใช้ในการจัดคิวสไตล์หรือสคริปต์ ใช้ wp_enqueue_scripts แทน
rok

@ user1264304 เราไม่ได้ทำการเข้าคิวสิ่งต่าง ๆ ที่นี่เราทำการ dequeueing สิ่งต่าง ๆ
Mayeenul Islam

1
ใช่ แต่ตามลิงค์หนึ่งควรใช้add_filter( 'wp_enqueue_scripts', 'project_dequeue_unnecessary_scripts')
ร็อค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.