Cum să încarci fișiere JS și CSS doar pe pagini specifice folosind is_page()?
Construiesc primul meu plugin WordPress care ar trebui să încarce fișiere JS și CSS doar pe pagini specifice selectate printr-un formular disponibil în zona de administrare a plugin-ului. Odată selectat în formular, titlul paginii este stocat în tabelul wp_options din baza de date, apoi datele sunt extrase într-o variabilă numită $page_selected. Pentru a încărca fișierele JS și CSS doar în paginile selectate în formular, am vrut să folosesc funcția is_page(), transmițând variabila $page_selected ca parametru.
// Funcție pentru încărcarea tooltip-ului personalizat
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');
Din păcate, în cazul meu acea instrucțiune condițională nu funcționează corect. Există vreo modalitate de a obține același rezultat, potrivind pagina selectată în formular de către utilizator cu pagina curentă afișată?

Dacă $page_selected
returnează un șir de caractere care conține titlul paginii, ar trebui să funcționeze corect. Am testat și is_page()
acceptă titlul paginii, ID-ul paginii și slug-ul.
Dacă întâmpinați probleme, ar fi mai bine să stocați ID-ul paginii în baza de date și să îl utilizați cu is_page()
.
Vă rugăm să consultați https://codex.wordpress.org/Function_Reference/is_page pentru mai multe detalii despre argumentele posibile care pot fi transmise acestei instrucțiuni condiționale.

Am făcut câteva modificări și sper că acest lucru vă va fi de ajutor. Încercați codul de mai jos:
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');
}
Aici, asigurați-vă despre $page_selected
.
NOTĂ: Ar trebui să încărcați întotdeauna scripturile în fișierul functions.php al temei - nu într-un fișier de tip template. Fișierele template nu sunt locul potrivit în 99,9% din cazuri.
Puteți folosi is_page()
în mai multe forme, cum ar fi:
// Când este afișată orice pagină individuală.
is_page();
// Când este afișată pagina cu ID-ul 42.
is_page( 42 );
// Când este afișată pagina cu titlul "Contact".
is_page( 'Contact' );
// Când este afișată pagina cu slug-ul "about-me".
is_page( 'about-me' );
// Returnează true când pagina afișată are ID-ul 42, sau slug-ul "about-me", sau titlul "Contact".
is_page( array( 42, 'about-me', 'Contact' ) );
Notă: Abilitatea de a folosi array a fost adăugată în versiunea 2.5.

Dacă rulezi acest cod într-un fișier de șablon, va funcționa fără probleme, dar dacă acest cod este în functions.php sau într-un fișier de plugin, va genera această eroare în debug.log
:
PHP Notice: is_page a fost apelat incorect. Etichetele condiționale de interogare nu funcționează înainte ca interogarea să fie executată. Până atunci, ele întotdeauna returnează false.
În acest caz, poți folosi hook-ul de acțiune template_redirect
, așa cum este explicat aici.

Netestat... dar ceva de genul acesta ar trebui să funcționeze pentru a obține numele (adică slug-ul) paginii afișate în prezent:
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 );
}
}
}
Comparația cu $page_selected
presupune, desigur, că aceasta este tot în format "slug"... sau dacă comparăm cu titlul paginii, puteți folosi $post->post_title
în loc de $post->post_name
.
Notă: acesta este un exemplu în care utilizarea claselor PHP este utilă, pentru a evita folosirea unei variabile globale ($page_selected
) în interiorul acelei funcții...
