Ich stoße also weiterhin auf dieses Problem und suche nach der besten und einfachsten Lösung, um dieses Problem zu lösen.
Ich bin dazu gekommen, benutzerdefinierte Beitragstypen in vielen verschiedenen Projekten zu verwenden und habe diese mit benutzerdefinierten Metaboxen erweitert, die ich dann durch Hinzufügen von benutzerdefinierten Skripten, wie z. B. jQuery-Ereigniskalender-Selektoren, erweitert habe ... Ich möchte nicht, dass diese benutzerdefinierten jQuery-Skripte auf jeder Seite im Admin geladen werden.
Im Grunde bin ich nur auf der Suche nach einer Möglichkeit, diese benutzerdefinierten JQuery-Felder zu laden, wenn ich mich auf der Seite "Beitrag bearbeiten" für einen SPEZIFISCHEN Beitragstyp befinde.
Was ist hier die beste Lösung?
UPDATE 1
Zunächst einmal vielen Dank.
Eigentlich bin ich schockiert, dass Plugin-Entwickler solche Dinge nicht sicherstellen, da dies, wie ich herausfinde, einer der Hauptgründe ist, warum es Probleme mit verschiedenen Plugins gibt.
Ich habe jedoch einige weitere Probleme damit. Beispielsweise...
Ich habe das Skript geändert, um die if-Anweisung wie folgt aufzurufen:
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events')
Wie Sie sehen, versuche ich, die Einstellungen so vorzunehmen, dass meine Skripte NUR aufgerufen werden, wenn ich einen Beitrag im Beitragstyp "Ereignisse" hinzufüge oder bearbeite.
Ich möchte nicht, dass das Skript auf einer anderen Seite geladen wird, und ich möchte auch nicht, dass es in der Liste der Seiten innerhalb des Beitragstyps "events" ausgeführt wird, daher würde ich die if-Anweisung für richtig halten.
Das Problem scheint jedoch zu sein, dass das Skript nur geladen wird, wenn ich einen neuen Beitrag innerhalb dieses Beitragstyps erstelle, aber es scheint nicht zu funktionieren, wenn ich einen vorhandenen Beitrag bearbeite.
Könnten Sie das testen und mich vielleicht wissen lassen, was ich falsch machen könnte?
Hier ist der genaue Code, den ich verwende ... gibt es vielleicht eine bessere oder einfachere Möglichkeit, dies zu tun?
<?php
// INCLUDE METABOX CUSTOM JQUERY DATEPICKER 2
add_action('admin_init','load_admin_datapicker_script');
function load_admin_datapicker_script() {
global $pagenow, $typenow;
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events') {
$ss_url = get_bloginfo('stylesheet_directory');
wp_enqueue_script('jquery');
wp_enqueue_script('custom_js_jquery_ui',"{$ss_url}/admin-metabox/js/jquery-ui-1.7.1.custom.min.js",array('jquery'));
wp_enqueue_script('custom_js_daterangepicker',"{$ss_url}/admin-metabox/js/daterangepicker.jQuery.js",array('jquery'));
wp_enqueue_script('custom_js_custom',"{$ss_url}/admin-metabox/js/custom.js",array('jquery'),NULL,TRUE);
wp_enqueue_style('custom_css_daterangepicker',"{$ss_url}/admin-metabox/css/ui.daterangepicker.css");
wp_enqueue_style('custom_css_jquery_ui',"{$ss_url}/admin-metabox/css/redmond/jquery-ui-1.7.1.custom.css");
}
}
Auch ... wenn ich drei Beitragstypen hinzufügen und verschiedene JS-Skripte für jeden Beitragstyp laden möchte, würde ich den Code einfach dreimal hintereinander duplizieren, oder ist dies keine gute Methode, dies zu tun? Zum Beispiel ... wäre es besser, einfach Folgendes aufzurufen: global $ pagenow, $ typenow; Oben in meiner Funktionsdatei, oder ist es wichtig oder kompliziert, wenn ich es mehr als einmal dupliziere?
Auf ein anderes Problem bezogen auf das selbe ... Ich benutze zum Beispiel das "Schwerkraftformen" -Plugin, aber ich habe bemerkt, dass ihre Skripte auf jeder Seite im Admin laufen, was Probleme mit anderen Plugins verursacht. Wie gehe ich vor, um ihr Skript zu ändern, um sicherzustellen, dass die Skripte nur geladen werden, wenn ich sie brauche.
UPDATE 2
Ich habe meine functions.php-Datei mit dem von Mike (unten) bereitgestellten Code geändert. Es scheint jedoch, dass das entsprechende Javascript noch enthalten ist, wenn Sie einen NEUEN Beitrag oder eine NEUE Seite erstellen. Dies bedeutet, wenn Sie versuchen, einen NEUEN Beitrag oder eine NEUE Seite zu erstellen, indem Sie entweder einen neuen WordPress-Standardbeitrag / eine neue WordPress-Standardseite erstellen, oder wenn Sie einen NEUEN Beitrag / eine neue Standardseite basierend auf einem Ihrer benutzerdefinierten Beitragstypen erstellen. Der von Mike vorgeschlagene Code funktioniert auf allen anderen Admin-Seiten und auch, wenn Sie einen vorhandenen Beitrag / eine Seite oder einen benutzerdefinierten Beitragstyp "BEARBEITEN". Irgendwelche vorgeschlagenen Änderungen, um diese Arbeit korrekt zu machen?
Hier ist mein aktueller Code:
<?php
add_action('admin_init','load_admin_datapicker_script');
function load_admin_datapicker_script() {
global $pagenow, $typenow;
if (empty($typenow) && !empty($_GET['post'])) {
$post = get_post($_GET['post']);
$typenow = $post->post_type;
}
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events') {
$ss_url = get_bloginfo('stylesheet_directory');
wp_enqueue_script('jquery');
wp_enqueue_script('custom_js_jquery_ui',"{$ss_url}/admin-metabox/js/jquery-ui-1.7.1.custom.min.js",array('jquery'));
wp_enqueue_script('custom_js_daterangepicker',"{$ss_url}/admin-metabox/js/daterangepicker.jQuery.js",array('jquery'));
wp_enqueue_script('custom_js_custom',"{$ss_url}/admin-metabox/js/custom.js",array('jquery'),NULL,TRUE);
wp_enqueue_style('custom_css_daterangepicker',"{$ss_url}/admin-metabox/css/ui.daterangepicker.css");
wp_enqueue_style('custom_css_jquery_ui',"{$ss_url}/admin-metabox/css/redmond/jquery-ui-1.7.1.custom.css");
}
}
?>