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

Ich baue mein erstes WP-Plugin, es sollte einige JS- und CSS-Dateien nur auf bestimmten Seiten laden, die über ein Formular im Admin-Bereich des Plugins ausgewählt wurden. Sobald der Seitentitel im Formular ausgewählt wurde, wird er in der Tabelle wp_options der database gespeichert. Anschließend werden die Daten in einer Variablen mit dem Namen $ page_selected abgerufen. Um JS- und CSS-Dateien nur auf den im Formular ausgewählten Seiten zu laden, wollte ich die function 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'); 

Unglücklicherweise funktioniert diese Bedingungsanweisung nicht korrekt. Gibt es eine Möglichkeit, das gleiche Ergebnis zu erzielen, wenn die vom Benutzer im Formular ausgewählte Seite mit der aktuellen Seite übereinstimmt?

Solutions Collecting From Web of "Wie lade ich JS und CSS nur auf bestimmten Seiten mit is_page ()?"

Wenn $page_selected eine Zeichenfolge zurückgibt, die den $page_selected enthält, sollte es funktionieren. Ich habe es getestet und is_page() akzeptiert is_page() , Seiten-ID und den Slug.

Wenn Probleme auftreten, ist es besser, die Seiten-ID in der database zu speichern und sie mit is_page()

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

Ungetestet … aber so etwas sollte funktionieren, um den Namen (dh 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 zu $page_selected erwartet natürlich, dass es auch im “Slug” -Format ist … oder wenn man mit dem $post->post_title vergleicht, könnte man $post->post_title anstelle von $post->post_name .

Beachten Sie, dass dies ein Beispiel ist, bei dem die Verwendung von PHP-classn hilfreich ist, um zu vermeiden, dass eine globale Variable ( $page_selected ) innerhalb dieser function verwendet werden muss …

Ich mache einige schöne Veränderungen und ich hoffe, dass dir das gut hilft. Probieren Sie den folgenden Code aus:

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

$page_selected hier sicher, dass $page_selected .

HINWEIS: Sie sollten Ihre Skripts immer in die functions.php- Datei eines Themas einreihen – keine Vorlagendatei. Vorlagendateien sind in 99,9% der Fälle nicht der richtige Ort.

Sie können is_page() in mehrfacher Form verwenden:

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

Wenn Sie diesen Code in einer Vorlagendatei ausführen, funktioniert das zwar debug.log , aber wenn sich dieser Code in functions.php oder in einer Plugin-Datei befindet, wird dieser Fehler in debug.log :

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

In diesem Fall könnten Sie den Aktions-Hook template_redirect wie hier erläutert verwenden.