Come includere il codice solo su pagine specifiche?


14

Sto imparando su plugin e codici brevi. Ho notato che quando attivo il mio plug-in il suo codice viene caricato su tutte le mie pagine, anche quelle che non hanno il mio shortcode. (Non intendo il contenuto rispetto alle pagine di amministrazione). In alcune pagine di contenuti, utilizzo un particolare shortcode e in altre pagine di contenuti non lo faccio, ma in ogni caso viene caricato il codice del plug-in. Come faccio a fare in modo che il plugin sia incluso solo nelle pagine in cui viene utilizzato lo shortcode?

Più dettaglio:

Diciamo che ho un plugin che crea un lightbox. Attivo il plugin. Nella mia pagina "Immagini fantastiche", utilizzo lo shortcode per creare una lightbox. Quando controllo Visualizza sorgente sulla mia pagina "Informazioni", che non utilizza lo shortcode lightbox, vedo che il codice del plug-in lightbox è stato caricato. Le mie pagine si caricheranno più velocemente se scrivo il mio plugin in modo che il suo codice sia caricato solo sulle pagine in cui è necessario. È possibile? Altrimenti, avrò il codice per molti plugin caricati inutilmente sulle pagine. Qualche idea?


1
Stai cercando di accodare qualcosa o di eseguire uno script PHP su pagine che hanno lo shortcode?
Mor7ifer

+1 @ m0r7if3r - Vorrei anche capire che ... Gli approcci sarebbero molto diversi
krembo99

@ mrOr7if3r, grazie per il messaggio. Ad esempio, supponiamo di avere un plug-in di Google Maps. Quel plug-in deve essere caricato su ogni pagina, ovvero pagine che non utilizzano il plug-in? Diciamo che ho una pagina "Informazioni" che non contiene lo shortcode di Google Maps. Se guardo Visualizza sorgente, vedo che il codice del plug-in è stato caricato su quella pagina (anche se l'evento non lo sto usando). Il codice per i plugin deve essere caricato su ogni singola pagina? Grazie.
Laxmidi,

Buona domanda quale imho porta a (nuove) migliori pratiche, poiché WP ora ci consente di accodare gli script in qualsiasi momento.
Raffaello

Risposte:


9

WP v3.3 ci ha dato la possibilità di eseguire wp_enqueue_script nel mezzo di una pagina. Biglietto 9346

Ciò ha reso molto più facile includere il tuo JS con una granularità migliore (almeno quando usi i codici brevi). Qui, jquery verrà incluso solo quando viene attivato il nostro shortcode.

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
Ecco come dovrebbe essere fatto, imo.
Raffaello

1
Eccellente, non mi ero reso conto che ora era possibile eseguire wp_enqueue_script nel mezzo di una pagina. Un modo molto più pulito per caricare script / css solo quando necessario!
Rick Curran,

2

Controlla le variabili dell'interfaccia utente dell'amministratore

Una voce di menu è un caso speciale: i commenti, poiché vengono registrati utilizzando l' 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

Questi sono non coerenti e codificati nel core di wp. Si noti che non tutte sono impostate su tutte le pagine.

Aggancia gli hook dell'interfaccia utente di amministrazione specifici della pagina

Poi ci sono anche speciali hook specifici per la pagina, che puoi dare un'occhiata admin-footer.phpe admin-header.php:

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

Alcuni esempi nel mondo reale: Post Screen

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

Poi c'è anche $hook_suffixquello su cui puoi verificare la presenza di script di accodamento, proprio quando stai agganciando la tua azione:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Aggiornare

Per ottenere un accesso più semplice (1 clic) a questi dati / informazioni, abbiamo creato un plug-in gratuito per sviluppatori chiamato "(WCM) Informazioni sull'amministratore corrente" , disponibile su GitHub . Il plugin può essere trovato nel prossimo futuro anche nel repository ufficiale di wp.org .

Schermate

Per dare un'anteprima di ciò che ottieni con questo plugin:

Schermo

ganci

globals


0

Potrebbe fare qualcosa del genere (nell'header.php):

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

Verifica se il carico corrente è pagina o post, quindi prende il contenuto e cerca il tuo shortcode. Dopo averlo trovato, esegue la tua funzione.


Grazie per il vostro messaggio. Ho provato a utilizzare la tua soluzione, ma, sfortunatamente, non sono riuscito a farlo funzionare.
Laxmidi,

È stato aggiunto all'intestazione?
Noel Tock,

1
Hai già visto get_shortcode_regex()?
Kaiser

0

Il modo più semplice è controllare solo lo 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
C'è get_shortcode_regex()per quello.
Kaiser

0

@kaiser ha notato get_shortcode_regex()più volte in questo thread, ho pensato di dare un esempio su come usarlo. Il codice è praticamente tratto dalla get_shortcode_regex()pagina di riferimento del codice di 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

Ho trovato questa soluzione :

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

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

3
Ma le
tue
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.