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