it-swarm.com.de

Wie füge ich Code nur auf bestimmten Seiten ein?

Ich lerne etwas über Plugins und Shortcodes. Ich habe festgestellt, dass der Code bei der Aktivierung meines Plugins auf alle meine Seiten geladen wird - auch auf Seiten, die meinen Shortcode nicht haben. (Ich meine nicht Inhalt gegen Admin-Seiten). Auf einigen Inhaltsseiten verwende ich einen bestimmten Shortcode und auf anderen Inhaltsseiten nicht - aber auf jeden Fall wird der Code des Plugins geladen. Wie mache ich es so, dass das Plugin nur auf Seiten enthalten ist, auf denen der Shortcode verwendet wird?

Mehr Details:

Nehmen wir an, ich habe ein Plugin, das eine Lightbox erstellt. Ich aktiviere das Plugin. Auf meiner Seite "Coole Bilder" verwende ich einen Shortcode, um eine Lightbox zu erstellen. Wenn ich auf meiner Seite "Über" die Option "Quelltext anzeigen" auswähle, auf der der Lightbox-Shortcode nicht verwendet wird, wird angezeigt, dass der Code des Lightbox-Plugins geladen wurde. Meine Seiten werden schneller geladen, wenn ich mein Plugin schreibe, sodass der Code nur auf den Seiten geladen wird, auf denen er benötigt wird. Ist das möglich? Ansonsten werde ich unnötigerweise Code für viele Plugins auf Seiten laden lassen. Irgendwelche Ideen?

14
Laxmidi

Mit WP v3.3 konnten wir wp_enqueue_script in der Mitte einer Seite ausführen. Ticket 9346

Dies hat es viel einfacher gemacht, Ihren JS mit besserer Granularität einzubinden (zumindest bei Verwendung von Shortcodes). Hier ist die Abfrage nur enthalten, wenn unser Shortcode ausgelöst wird.

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' );
8
Dave Romsey

Überprüfen Sie die Benutzeroberflächenvariablen für Administratoren

Ein Menüpunkt ist ein Sonderfall: Kommentare, die über die API add_WHATEVER_(submenu)page() registriert werden.

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

Diese sind nicht konsistent und in wp core fest codiert. Beachten Sie, dass nicht alle auf allen Seiten festgelegt sind.

Haken Sie sich in seitenbezogene Administrations-UI-Haken ein

Dann gibt es noch spezielle, seitenbezogene Hooks, die Sie in admin-footer.php und admin-header.php nachlesen können:

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

Einige Beispiele aus der Praxis: Post Screen

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

Dann gibt es noch den $hook_suffix, anhand dessen Sie überprüfen können, ob Skripte in die Warteschlange gestellt werden:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Aktualisieren

Um einen einfacheren (1-Klick) Zugriff auf diese Daten/Informationen zu erhalten, haben wir ein frei verfügbares, entwicklerfreundliches Plugin namens "(WCM) Current Admin Info" erstellt, das auf GitHub verfügbar ist. Das Plugin kann in naher Zukunft auch im offiziellen wp.org Repository gefunden werden.

Screenshots

So geben Sie eine Vorschau auf das, was Sie mit diesem Plugin erhalten:

Screen

Hooks

Globals

2
kaiser

Könnte etwas in der Art von (in der header.php) machen:

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

Überprüft, ob es sich beim aktuellen Ladevorgang um eine Seite oder einen Beitrag handelt, greift nach Inhalten und sucht nach Ihrem Shortcode. Wenn es gefunden wird, führt es Ihre Funktion aus.

0
Noel Tock

Am einfachsten ist es, nur nach dem Shortcode zu suchen.

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');
0
matchdav

@kaiser hat get_shortcode_regex() mehrmals in diesem Thread notiert, ich dachte nur, ich gebe ein Beispiel, wie man es benutzt. Der Code ist so ziemlich der get_shortcode_regex() WordPress Code Reference-Seite entnommen.

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' );
0
Nicolai