Làm cách nào để chỉ tải JS và CSS trên các Trang cụ thể bằng cách sử dụng is_page ()?


7

Tôi đang xây dựng plugin WP đầu tiên của mình, nó chỉ nên tải một số tệp JS và CSS trên các trang cụ thể được chọn thông qua một biểu mẫu có sẵn trong khu vực Quản trị viên plugin. Sau khi được chọn trong biểu mẫu, Tiêu đề trang được lưu trữ trong bảng DB wp_options, sau đó dữ liệu được kéo ra trong một biến có tên $ page_selected. Để chỉ tải các tệp JS và CSS trong các trang được chọn trong biểu mẫu, tôi muốn sử dụng hàm is_page (), truyền biến $ page_selected làm tham số.

 function my_custom_tooltip() {
    if (  is_page($page_selected) ) {
        wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
        wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
    }
} add_action('wp_enqueue_scripts', 'my_custom_tooltip');

Thật không may Trong trường hợp của tôi rằng tuyên bố có điều kiện không hoạt động chính xác. Có cách nào để đạt được kết quả tương tự, khớp với trang được người dùng chọn trong biểu mẫu với Trang hiện tại đang được hiển thị không?


1
is_page()chấp nhận các biến làm tham số. Trong thực tế, bạn có thể sử dụng các biến làm tham số cho bất kỳ hàm PHP nào chấp nhận tham số. Tại sao bạn nói nó không? Nó sẽ hoạt động nếu bạn vượt qua giá trị chính xác trong biến. Tôi nghĩ vấn đề là biến không có giá trị mà bạn nghĩ nó có.
cybmeta

Tôi đã cố lưu trữ trong một biến php, Tiêu đề trang hoặc Slug trang (ví dụ $ my_page_id = 'about';) và sau đó sử dụng biến đó làm tham số is_page (), nhưng nó không hoạt động. Trong codex WP, tôi phát hiện ra rằng is_page () chấp nhận ID trang, Tiêu đề trang hoặc Slug trang làm tham số. Tôi chưa quen với PHP và WP và tôi nghĩ điều đó có nghĩa là bạn chỉ có thể truyền các chuỗi hoặc số nguyên dưới dạng tham số hàm is_page (). Tôi đã sửa bài đăng của mình để tránh cung cấp thông tin sai lệch cho người dùng khác.
RaymondMik

bạn có thể hiển thịvar_dump($page_selected)
WPTC-Troop

1
Bây giờ tôi nghĩ rằng câu hỏi của bạn không phải là vấn đề thực sự của bạn. Tôi nghĩ bạn cần biết cách lấy giá trị được đặt trong biểu mẫu của plugin. Tôi chỉ lưu ý rằng $page_selectedbiến không được xác định trong mã của bạn. Bạn có thể chỉ cho chúng tôi cách bạn đã xây dựng biểu mẫu trong khu vực quản trị viên và làm thế nào để bạn lưu trữ các giá trị được đặt trong biểu mẫu đó?
cybmeta

Đây là cách tôi xây dựng biểu mẫu của mình trong khu vực Quản trị viên: <select name="page_dropdown"> <option value=""><?php echo esc_attr( __( 'Select page' ) ); ?</option> <?php $pages = get_pages(); foreach ( $pages as $page ) { $option = '<option>'; $option.= $page->post_title; $option .= '</option>'; echo $option; } ?> </select>Giả sử tôi chọn "test_page_1" trong biểu mẫu của mình - var_dump ($ page_selected) = string (11) "test_page_1";
RaymondMik

Câu trả lời:


6

Nếu $page_selectedtrả về một chuỗi chứa tiêu đề trang, nó sẽ hoạt động tốt. Tôi đã kiểm tra nó và is_page()chấp nhận tiêu đề trang, ID trang và sên.

Nếu bạn đang gặp vấn đề, sẽ tốt hơn nếu lưu trữ ID trang trong cơ sở dữ liệu và sử dụng nó với is_page()

Vui lòng tham khảo https://codex.wordpress.org/Function_Reference/is_page để biết thêm chi tiết về các đối số có thể có thể được chuyển cho tuyên bố có điều kiện này.


3

Tôi thực hiện một số thay đổi khá và tôi hy vọng điều này sẽ giúp bạn tốt. Hãy thử mã dưới đây:

function my_custom_tooltip() {
  wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
  wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
} 

if(is_page($page_selected)){
    add_action('wp_enqueue_scripts', 'my_custom_tooltip');
}

Ở đây, chắc chắn về $page_selected.

Chú ý: Bạn nên luôn luôn enqueue kịch bản của bạn trong một chủ đề functions.php tập tin - không phải là một tập tin mẫu. Các tệp mẫu chỉ là Không đúng nơi 99,9% thời gian.

Bạn có thể sử dụng is_page()dưới nhiều hình thức như:

// When any single Page is being displayed.
is_page();

// When Page 42 (ID) is being displayed.
is_page( 42 );

// When the Page with a post_title of "Contact" is being displayed.
is_page( 'Contact' );

// When the Page with a post_name (slug) of "about-me" is being displayed.
is_page( 'about-me' );

// Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "Contact".  
is_page( array( 42, 'about-me', 'Contact' ) );

Lưu ý: Khả năng mảng đã được thêm vào tại Phiên bản 2.5.


Để hoạt động chính xác, các kịch bản cần phải được xử lý vào đúng thời điểm trong khi tải trang. Nếu chúng được tải quá muộn, chúng có thể không hoạt động. Vì vậy, bạn cần phải móc chúng ra wp_enqueue_scriptshành động.
Giải pháp AddWeb Pvt Ltd

1

Nếu bạn đang chạy mã này bên trong một tệp mẫu, nó sẽ hoạt động tốt, nhưng nếu mã này nằm trong tệp.php hoặc trong tệp plugin, nó sẽ ném lỗi này vào debug.log:

Thông báo PHP: is_page được gọi không chính xác . Thẻ truy vấn có điều kiện không hoạt động trước khi truy vấn được chạy. Trước đó, họ luôn trả lại sai.

Trong trường hợp này, bạn có thể sử dụng template_redirecthook hành động, như được giải thích ở đây .


0

Chưa được kiểm tra ... nhưng một cái gì đó như thế này sẽ hoạt động để có được tên (ví dụ như sên) của trang hiện đang hiển thị:

function my_custom_tooltip() {
    global $post;
    if ( is_object( $post ) && $post->post_type=='page' ) {
        if ( $post->post_name == $page_selected ) {
            wp_enqueue_style( 'custom_tooltip_frontend_css', plugins_url('custom-image-tooltip/custom-image-tooltip.css') );
            wp_enqueue_script( 'custom_tooltip_frontend_js', plugins_url('custom-image-tooltip/custom-image-tooltip.js'), array('jquery'), '', true );
        }
    }
}

Tất nhiên, việc so sánh với $page_selectednó cũng mong đợi nó ở định dạng "sên" ... hoặc nếu so sánh với tiêu đề trang bạn có thể sử dụng $post->post_titlethay vì $post->post_name.

Lưu ý, đây là một ví dụ trong đó việc sử dụng các lớp PHP là hữu ích, để tránh phải sử dụng biến toàn cục ( $page_selected) bên trong hàm đó ...

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.