Wie lade ich JS und CSS nur auf bestimmten Seiten mit is_page ()?

7

Ich erstelle mein erstes WP-Plugin. Es sollte einige JS- und CSS-Dateien nur auf bestimmten Seiten laden, die über ein Formular ausgewählt wurden, das im Plugin-Admin-Bereich verfügbar ist. Nach der Auswahl im Formular wird der Seitentitel in der Tabelle DB wp_options gespeichert und die Daten werden in einer Variablen mit dem Namen $ page_selected zurückgezogen. Um JS- und CSS-Dateien nur auf den im Formular ausgewählten Seiten zu laden, wollte ich die Funktion is_page () verwenden und die Variable $ page_selected als Parameter übergeben.

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

Leider funktioniert diese bedingte Anweisung in meinem Fall nicht richtig. Gibt es eine Möglichkeit, dasselbe Ergebnis zu erzielen, indem die vom Benutzer im Formular ausgewählte Seite mit der aktuell angezeigten Seite abgeglichen wird?

RaymondMik
quelle
1
is_page()akzeptiert Variablen als Parameter. Tatsächlich können Sie Variablen als Parameter für jede PHP-Funktion verwenden, die Parameter akzeptiert. Warum sagst du das nicht? Es sollte funktionieren, wenn Sie den richtigen Wert in der Variablen übergeben. Ich denke, das Problem ist, dass die Variable nicht den Wert hat, den Sie denken.
Cybmeta
Ich habe versucht, den Seitentitel oder den Page Slug (z. B. $ my_page_id = 'about';) in einer PHP-Variablen zu speichern und diese Variable dann als is_page () -Parameter zu verwenden, aber es hat nicht funktioniert. Im WP-Codex habe ich herausgefunden, dass is_page () Seiten-ID, Seitentitel oder Seiten-Slug als Parameter akzeptiert. Ich bin neu in PHP und WP und dachte, dass Sie nur Zeichenfolgen oder Ganzzahlen als Funktionsparameter is_page () übergeben können. Ich habe meinen Beitrag korrigiert, um zu vermeiden, dass andere Benutzer irreführende Informationen erhalten.
RaymondMik
können Sie einevar_dump($page_selected)
WPTC-Truppe
1
Jetzt denke ich, dass Ihre Frage nicht Ihr eigentliches Problem betrifft. Ich denke, Sie müssen wissen, wie Sie den im Plugin-Formular festgelegten Wert erhalten. Ich habe gerade bemerkt, dass die $page_selectedVariable in Ihrem Code nicht definiert ist. Können Sie uns zeigen, wie Sie das Formular im Administrationsbereich erstellt haben und wie Sie die in diesem Formular festgelegten Werte speichern?
Cybmeta
So habe ich mein Formular im Admin-Bereich erstellt: <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>Angenommen, ich wähle "test_page_1" in meinem Formular aus - var_dump ($ page_selected) = string (11) "test_page_1";
RaymondMik

Antworten:

6

Wenn $page_selectedeine Zeichenfolge mit dem Seitentitel zurückgegeben wird, sollte dies einwandfrei funktionieren. Ich habe es getestet und is_page()akzeptiere den Seitentitel, die Seiten-ID und den Slug.

Wenn Sie auf Probleme stoßen, ist es besser, die Seiten-ID in der Datenbank zu speichern und mit zu verwenden is_page()

Weitere Informationen zu den möglichen Argumenten, die an diese bedingte Anweisung übergeben werden können, finden Sie unter https://codex.wordpress.org/Function_Reference/is_page .

Puneet Sahalot
quelle
3

Ich mache einige hübsche Änderungen und hoffe, dass dies Ihnen gut hilft. Versuchen Sie den folgenden Code:

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');
}

Hier stellen Sie sicher $page_selected.

HINWEIS: Sie sollten Ihre Skripte immer in die Datei functions.php eines Themes einreihen - nicht in eine Vorlagendatei. Vorlagendateien sind in 99,9% der Fälle einfach nicht der richtige Ort .

Sie können is_page()in mehreren Formen verwenden wie:

// When any single Page is being displayed.
is_page();

// When Page 42 (ID) is being displayed.
is_page( 42 );

// When the Page with a post_title of "Contact" is being displayed.
is_page( 'Contact' );

// When the Page with a post_name (slug) of "about-me" is being displayed.
is_page( 'about-me' );

// Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "Contact".  
is_page( array( 42, 'about-me', 'Contact' ) );

Hinweis: Die Array-Fähigkeit wurde in Version 2.5 hinzugefügt.

AddWeb Solution Pvt Ltd.
quelle
Um ordnungsgemäß zu funktionieren, müssen Skripte zum richtigen Zeitpunkt beim Laden der Seite in die Warteschlange gestellt werden. Wenn sie zu spät geladen werden, funktionieren sie möglicherweise überhaupt nicht. Sie müssen sie also an die wp_enqueue_scriptsAktion anschließen.
AddWeb Solution Pvt Ltd
1

Wenn Sie diesen Code in einer Vorlagendatei ausführen, funktioniert er einwandfrei. Wenn sich dieser Code jedoch in functions.php oder in einer Plugin-Datei befindet, wird der folgende Fehler ausgelöst debug.log:

PHP Hinweis: is_page wurde falsch aufgerufen . Bedingte Abfragetags funktionieren nicht, bevor die Abfrage ausgeführt wird. Vorher geben sie immer false zurück.

In diesem Fall können Sie den hiertemplate_redirect erläuterten Aktions-Hook verwenden .

Lucas Miranda
quelle
0

Ungetestet ... aber so etwas sollte funktionieren, um den Namen (dh den Slug) der aktuell angezeigten Seite zu erhalten:

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 );
        }
    }
}

Der Vergleich mit $page_selectederwartet natürlich, dass er auch im "Slug" -Format vorliegt ... oder wenn Sie ihn mit dem Seitentitel vergleichen, können Sie ihn $post->post_titlestattdessen verwenden $post->post_name.

Beachten Sie, dass dies ein Beispiel ist, in dem die Verwendung von PHP-Klassen hilfreich ist, um zu vermeiden, dass in $page_selecteddieser Funktion eine globale Variable ( ) verwendet werden muss ...

CC
quelle