Cum să încarci fișiere JS și CSS doar pe pagini specifice folosind is_page()?

5 ian. 2016, 18:52:07
Vizualizări: 47.4K
Voturi: 11

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ă?

5
Comentarii

is_page() acceptă variabile ca parametru. De fapt, poți folosi variabile ca parametru pentru orice funcție PHP care acceptă parametri. De ce spui că nu funcționează? Ar trebui să funcționeze dacă treci valoarea corectă în variabilă. Cred că problema este că variabila nu are valoarea pe care tu crezi că o are.

cybmeta cybmeta
5 ian. 2016 19:20:34

Am încercat să stochez într-o variabilă php Titlul Paginii sau Slug-ul Paginii (de exemplu $my_page_id = 'despre';) și apoi să folosesc acea variabilă ca parametru pentru is_page(), dar nu a funcționat. În codex-ul WP am aflat că is_page() acceptă ca parametri ID-ul Paginii, Titlul Paginii sau Slug-ul Paginii. Sunt nou în PHP și WP și am crezut că asta înseamnă că poți pasa doar șiruri de caractere sau numere întregi ca parametru pentru funcția is_page(). Am corectat postarea mea pentru a evita să ofer informații eronate altor utilizatori.

RaymondMik RaymondMik
6 ian. 2016 11:40:49

poți arăta un var_dump($page_selected)

WPTC-Troop WPTC-Troop
6 ian. 2016 11:56:22

Acum cred că întrebarea ta nu este despre problema ta reală. Cred că trebuie să știi cum să obții valoarea setată în formularul plugin-ului. Tocmai am observat că variabila $page_selected nu este definită în codul tău. Poți să ne arăți cum ai construit formularul în zona de administrare și cum stochezi valorile setate în acel formular?

cybmeta cybmeta
6 ian. 2016 12:12:02

Așa am construit formularul meu în zona de administrare: <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> Să presupunem că selectez "test_page_1" în formularul meu - var_dump($page_selected) = string(11) "test_page_1";

RaymondMik RaymondMik
6 ian. 2016 12:32:03
Toate răspunsurile la întrebare 4
0
10

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.

5 ian. 2016 19:19:24
1

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.

9 ian. 2016 13:13:14
Comentarii

Pentru a funcționa corect, scripturile trebuie încărcate la momentul potrivit în timpul încărcării paginii. Dacă sunt încărcate prea târziu, este posibil să nu funcționeze deloc. De aceea, trebuie să le atașați la acțiunea wp_enqueue_scripts.

AddWeb Solution Pvt Ltd AddWeb Solution Pvt Ltd
9 ian. 2016 15:00:40
0

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.

18 sept. 2017 03:32:13
0

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...

5 ian. 2016 19:21:29