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?
quelle
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.var_dump($page_selected)
$page_selected
Variable 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?<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";Antworten:
Wenn
$page_selected
eine Zeichenfolge mit dem Seitentitel zurückgegeben wird, sollte dies einwandfrei funktionieren. Ich habe es getestet undis_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 .
quelle
Ich mache einige hübsche Änderungen und hoffe, dass dies Ihnen gut hilft. Versuchen Sie den folgenden Code:
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:Hinweis: Die Array-Fähigkeit wurde in Version 2.5 hinzugefügt.
quelle
wp_enqueue_scripts
Aktion anschließen.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
:In diesem Fall können Sie den hier
template_redirect
erläuterten Aktions-Hook verwenden .quelle
Ungetestet ... aber so etwas sollte funktionieren, um den Namen (dh den Slug) der aktuell angezeigten Seite zu erhalten:
Der Vergleich mit
$page_selected
erwartet natürlich, dass er auch im "Slug" -Format vorliegt ... oder wenn Sie ihn mit dem Seitentitel vergleichen, können Sie ihn$post->post_title
stattdessen 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_selected
dieser Funktion eine globale Variable ( ) verwendet werden muss ...quelle