Làm thế nào để chỉ bao gồm mã trên các trang cụ thể?


14

Tôi đang tìm hiểu về plugin và shortcodes. Tôi nhận thấy rằng khi tôi kích hoạt plugin, mã của nó sẽ được tải trên tất cả các trang của tôi - ngay cả những trang không có mã ngắn của tôi. (Tôi không có nghĩa là nội dung so với các trang quản trị). Trên một số trang nội dung, tôi sử dụng một mã ngắn cụ thể và trên các trang nội dung khác, tôi không-- nhưng trong mọi trường hợp, mã của plugin được tải. Làm cách nào để tôi tạo ra nó để plugin chỉ được bao gồm trên các trang sử dụng shortcode?

Thêm chi tiết:

Giả sử tôi đã có một plugin tạo hộp đèn. Tôi kích hoạt plugin. Trên trang "Hình ảnh mát mẻ" của tôi, tôi sử dụng shortcode để tạo hộp đèn. Khi tôi kiểm tra Xem Nguồn trên trang "Giới thiệu" của mình, trang này không sử dụng mã ngắn hộp đèn, tôi thấy rằng mã của plugin hộp đèn đã được tải. Các trang của tôi sẽ tải nhanh hơn nếu tôi viết plugin của mình để mã của nó chỉ được tải trên các trang cần thiết. Điều này có thể không? Mặt khác, tôi sẽ có mã cho rất nhiều plugin được tải trên các trang không cần thiết. Có ý kiến ​​gì không?


1
Bạn đang cố gắng chinh phục một cái gì đó, hoặc cố gắng thực thi một tập lệnh PHP trên các trang có mã ngắn?
mor7ifer

+1 @ m0r7if3r - Tôi cũng muốn hiểu rằng .. Các cách tiếp cận sẽ rất khác biệt
krembo99

@ mrOr7if3r, Cảm ơn tin nhắn. Ví dụ: giả sử tôi đã có plugin Google Maps. Có phải plugin đó phải được tải trên mỗi trang-- tức là các trang không sử dụng plugin? Giả sử tôi có trang "Giới thiệu" không có mã ngắn Google Maps trên đó. Nếu tôi xem View Source, tôi thấy rằng mã của plugin đã được tải trên trang đó (sự kiện mặc dù tôi không sử dụng). Có mã cho các plugin phải tải trên mỗi trang không? Cảm ơn.
Laxmidi

Câu hỏi hay mà imho dẫn đến thực tiễn tốt nhất (mới), vì WP bây giờ cho phép chúng ta tranh thủ các kịch bản bất cứ lúc nào.
Raphael

Câu trả lời:


9

WP v3.3 đã cho chúng tôi khả năng chạy wp_enqueue_script ở giữa trang. Vé 9346

Điều này đã làm cho việc bao gồm mã JS của bạn với độ chi tiết tốt hơn (ít nhất là khi sử dụng mã ngắn). Ở đây, jquery sẽ chỉ được bao gồm khi shortcode của chúng tôi được kích hoạt.

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );

1
Đây là cách nó nên được thực hiện, imo.
Raphael

1
Tuyệt vời, tôi đã không nhận ra rằng bây giờ có thể chạy wp_enqueue_script ở giữa một trang. Một cách sạch hơn nhiều để chỉ tải tập lệnh / css khi cần thiết!
Rick Curran

2

Kiểm tra các biến UI của quản trị viên

Một mục menu là trường hợp đặc biệt: Nhận xét, khi chúng được đăng ký bằng add_WHATEVER_(submenu)page()API.

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

Đây là những người không đồng ý và được mã hóa cứng vào lõi wp. Lưu ý rằng không phải tất cả được đặt trên tất cả các trang.

Nối vào các móc nối quản trị viên dành riêng cho trang

Sau đó, cũng có các móc đặc biệt, cụ thể theo trang, mà bạn có thể xem qua admin-footer.phpadmin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

Một số ví dụ trong thế giới thực: Màn hình bài

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

Sau đó, cũng có những thứ $hook_suffixmà bạn có thể kiểm tra để biết các kịch bản gây tranh cãi, ngay khi bạn thực hiện hành động của mình:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Cập nhật

Để có quyền truy cập dễ dàng hơn (1 lần nhấp) vào dữ liệu / thông tin này, chúng tôi đã xây dựng một plugin thân thiện với nhà phát triển, có sẵn miễn phí có tên "(WCM) Thông tin quản trị hiện tại" , có sẵn trên GitHub . Plugin trong tương lai gần cũng có thể được tìm thấy trong kho wp.org chính thức .

Ảnh chụp màn hình

Để đưa ra bản xem trước những gì bạn nhận được với plugin này:

Màn

Móc

Quả cầu


0

Có thể làm một cái gì đó dọc theo dòng (trong tiêu đề.php):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

Kiểm tra xem tải hiện tại là trang hay bài đăng, sau đó lấy nội dung và tìm kiếm mã ngắn của bạn. Khi tìm thấy nó, nó thực thi chức năng của bạn.


Cảm ơn vì lời nhắn. Tôi đã thử sử dụng giải pháp của bạn, nhưng thật không may, tôi không thể làm cho nó hoạt động được.
Laxmidi

Đã được thêm vào tiêu đề?
Noel Tock

1
Bạn đã thấy get_shortcode_regex()chưa?
kaiser

0

Cách đơn giản nhất là chỉ cần kiểm tra shortcode.

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');

1
get_shortcode_regex()điều đó.
kaiser

0

@kaiser lưu ý get_shortcode_regex()nhiều lần trong chủ đề này, tôi chỉ nghĩ rằng tôi đưa ra một ví dụ về cách sử dụng nó. Mã được lấy khá nhiều từ get_shortcode_regex()trang Tham khảo mã WordPress.

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );

-3

Tôi tìm thấy giải pháp này :

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}

3
Nhưng các giải pháp của bạn sẽ xóa các tập lệnh khỏi tất cả các trang
Mamaduka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.