wp enqueue phong cách trên các mẫu trang cụ thể


24

Tôi đang trong quá trình tạo chủ đề, tôi muốn thêm trang đích bằng cách sử dụng các mẫu trang. Tôi không thể tìm thấy bất cứ nơi nào chỉ ra cách liệt kê phong cách hoặc js cho các mẫu trang cụ thể. Bất kỳ đề xuất. Vd Trang đích 1 - trang đích-template-one.php sẽ cần kiểu và js rất khác so với blog hoặc trang chủ.

Câu trả lời:


29

Nếu bạn có kế hoạch thực hiện nhiều phát triển WP, bạn nên đánh dấu trang này: http://codex.wordpress.org/Conditable_Tags

Câu trả lời khác hoạt động nhưng điều kiện phụ thuộc vào sên trang của bạn (myurl.com/this-is-the-slug) không bao giờ thay đổi. Một phương pháp đáng tin cậy hơn (IMO), và một phương pháp phù hợp với trường hợp này, sẽ là sử dụng is_page_template('example-template.php')kiểm tra có điều kiện thay thế.


22

Bạn có thể sử dụng các is_page( 'landing-page-template-one' )điều kiện xung quanh các kiểu / tập lệnh cụ thể trên trang của bạn như một phần của tất cả các câu lệnh enqueue.

function my_enqueue_stuff() {
  if ( is_page( 'landing-page-template-one' ) ) {
    /** Call landing-page-template-one enqueue */
  } else {
    /** Call regular enqueue */
  }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_stuff' );

Bạn thậm chí có thể xâu chuỗi nhiều hơn elseifở trên cho các trang khác, v.v.

Tham khảo: Tham chiếu chức năng -is_page()


Bạn được chào đón Sean, vui mừng được giúp đỡ.
Edward Caissie

2
Tôi nghĩ rằng việc sử dụng is_page_template()là tốt hơn vì sên trang dễ dàng thay đổi. Giải pháp này, trong khi nó hoạt động tốt, sẽ bị hỏng nếu thay đổi sên. Xem giải pháp của kchjr nếu có ai gặp vấn đề trong tương lai.
BODA82

Cảm ơn bạn! Đối với những người khác vấp phải điều này: câu lệnh có điều kiện is_pagephải nằm trong hàm gắn liền với hành động và không bao bọc add_actionchính câu lệnh đó. Nếu bạn thực hiện bọc add_actioncâu lệnh trong một điều kiện, nó sẽ là sớm trong quá trình xử lý trang để biết nó là trang nào.
Hendeca

2

Nếu mẫu trang được đặt trong thư mục con của chủ đề (kể từ WP 3.4), hãy thêm tên thư mục và dấu gạch chéo vào tên tệp mẫu, ví dụ:

is_page_template( 'templates/about.php' );

Vì vậy, toàn bộ chức năng trông giống như:

function my_enqueue_stuff() {
  if ( is_page_template( 'landing-page-template-one' ) ) {
    /** Call landing-page-template-one enqueue */
  } else {
    /** Call regular enqueue */
  }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_stuff' );

Tham khảo: Tài liệu chính thức


Cảm ơn đã đề cập rằng is_page_template ()kiểm tra phải nằm trong chức năng enqueue, và không phải xung quanh nó.
gregn3

1

Tôi không biết nếu các giải pháp được cung cấp trong các câu trả lời khác được sử dụng để làm việc, nhưng (vì không có câu trả lời được chấp nhận!) Có vẻ như câu trả lời đúng hiện tại là:

function my_enqueue_stuff() {
    if ( get_page_template_slug() == 'landing-page-template-one.php' ) {
        wp_enqueue_script('my-script-handle', 'script-path.js', ... );
    }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_stuff' );

is_page_template () chỉ hoạt động bên ngoài vòng lặp, theo https://developer.wordpress.org/reference/fifts/is_page_template/ .


theo các tài liệu được đề cập, nó không thể được sử dụng trong vòng lặp
Selrond

ngoài vòng lặp. đó là những gì tôi đã nói ... * đỏ mặt *
Richplane

1

Giả sử tên mẫu của bạn là bình tĩnh và bạn muốn tải bootstrap trên trang đó để bạn có thể ghi lại kiểu trên các mẫu trang cụ thể như thế này:

đi đến tập tin function.php sau đó kiểm tra điều kiện như thế này:

function temper_scripts() {

    if(basename(get_page_template()) == 'temper.php'){

       wp_enqueue_style('bootstrap', '//stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css');

    }

}

add_action('wp_enqueue_scripts', 'temper_scripts');
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.