Jadi saya terus mengalami masalah ini dan saya hanya mencari solusi terbaik dan paling sederhana untuk menyelesaikan masalah ini.
Saya datang untuk menggunakan jenis posting khusus di banyak proyek yang berbeda dan telah memperpanjang ini dengan metabox khusus yang kemudian saya lanjutkan dengan menambahkan skrip khusus seperti pemilih kalender acara jQuery ... Semua ini berfungsi dengan baik kecuali untuk satu masalah utama ... Saya tidak ingin skrip jQuery kustom ini dimuat di setiap halaman di admin.
Saya pada dasarnya hanya mencari cara untuk memiliki bidang jquery khusus ini dimuat ketika saya pada halaman "edit posting" untuk jenis posting SPESIFIK.
Apa solusi terbaik di sini?
PEMBARUAN 1
Pertama-tama, terima kasih banyak.
Saya benar-benar terkejut bahwa pengembang plugin tidak memastikan hal-hal seperti ini karena ketika saya mencari tahu ini adalah salah satu alasan utama bahwa ada masalah dengan plugin yang berbeda.
Saya memiliki beberapa masalah lebih lanjut dengan ini. Sebagai contoh...
Saya telah memodifikasi skrip untuk memanggil pernyataan if seperti ini:
if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='events')
Seperti yang Anda lihat, saya mencoba mengatur semuanya sehingga skrip saya HANYA dipanggil ketika saya menambahkan atau mengedit posting dalam jenis posting "peristiwa".
Saya tidak ingin skrip dimuat pada halaman lain dan juga tidak ingin skrip berjalan pada daftar halaman dalam jenis tulisan "peristiwa" jadi saya akan berpikir pernyataan if benar.
Namun masalahnya tampaknya skrip hanya dimuat ketika saya membuat posting baru dalam jenis posting ini tetapi tampaknya tidak berfungsi ketika saya mengedit posting yang sudah ada.
Bisakah Anda menguji ini dan mungkin memberi tahu saya apa yang bisa saya lakukan salah?
Berikut adalah kode persis yang saya gunakan ... mungkin ada cara yang lebih baik atau sederhana untuk melakukan ini?
<?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");
}
}
Juga ... jika saya ingin menambahkan tiga jenis posting dan memuat skrip JS yang berbeda untuk setiap jenis posting maka apakah saya akan menduplikasi kode di atas tiga kali terpisah atau apakah ini bukan cara yang baik untuk melakukan ini? Misalnya ... apakah lebih baik menelepon: global $ pagenow, $ typenow; Di bagian atas file fungsi saya atau apakah itu penting atau menyulitkan ketika saya menduplikasinya lebih dari sekali?
Pada masalah yang berbeda terkait dengan hal yang sama ... Saya misalnya menggunakan plugin "gayaberkas" tetapi saya perhatikan skrip mereka berjalan pada setiap halaman di admin yang menyebabkan masalah dengan plugin lain. Bagaimana saya akan memodifikasi skrip mereka untuk memastikan skrip hanya dimuat ketika saya membutuhkannya.
PEMBARUAN 2
Saya telah memodifikasi file functions.php saya dengan kode yang disediakan oleh Mike (di bawah) namun tampaknya javascript yang berlaku masih disertakan ketika Anda membuat Posting atau Halaman BARU. Ini berarti bahwa ketika Anda mencoba untuk membuat Posting atau Halaman BARU baik dengan membuat posting / halaman wordpress default baru atau ketika Anda membuat posting / halaman BARU berdasarkan salah satu jenis posting kustom Anda. Kode yang diusulkan oleh Mike IS bekerja pada semua halaman admin lainnya dan TIDAK AKAN berfungsi ketika Anda "MENGEDIT" pos yang ada / halaman atau jenis pos kustom. Adakah modifikasi yang disarankan untuk membuat pekerjaan ini benar?
Ini kode saya saat ini:
<?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");
}
}
?>
sumber
Jawaban:
Pertama, saya menganggap Anda menggunakan
wp_enqueue_script()
untuk memuat skrip Anda , bukan?Yang mengatakan, jika saya mengerti pertanyaan Anda maka yang Anda butuhkan adalah sesuatu seperti yang berikut . Anda harus mengeditnya untuk detail Anda, tentu saja, tetapi itu memberi Anda kerangka umum.
Kami terhubung
admin_init
dengan fungsiload_my_script()
untuk menguji global$pagenow
untuk kecocokan dengan halaman adminedit.php
, dan global$typenow
untuk melihat apakah jenis posting adalah yang Anda inginkan.Sisanya hanyalah detail yang bisa Anda baca di sini jika Anda perlu mempelajari lebih lanjut:
MEMPERBARUI
Saya membalas pembaruan Anda. Sayangnya ( untuk alasan apa pun )
$typenow
tidak memiliki nilai selamaadmin_init
jadi Anda harus mendapatkanpost_type
dengan memuat posting berdasarkan parameter URL'post'
seperti yang Anda lihat pada contoh berikut (saya telah menyalin baris di atas dan baris di bawah dari contoh Anda sehingga Anda dapat melihat di mana menempatkannya):PS Adapun pertanyaan Anda yang lain, silakan posting sebagai pertanyaan baru di situs untuk saya atau orang lain untuk menjawab. Karena kami bekerja sangat keras untuk membantu Anda, harap berhati-hati untuk memberikan judul terbaik Anda sebisa mungkin dan juga silakan tulis pertanyaan Anda sejelas dan sejelas mungkin dengan format yang baik dan bahasa Inggris yang tepat. Jika Anda akan melakukan ini, itu akan membantu dengan masalah yang sama mengenali pertanyaan Anda sebagai mirip dengan apa yang mereka butuhkan dan itu akan memudahkan kita yang menjawab pertanyaan Anda.
Saya menanyakan hal ini kepada Anda ( dan semua orang lain yang mengajukan pertanyaan pada Jawaban WordPress ) sebagai imbalan sebagai imbalan atas upaya waktu untuk menjawab pertanyaan Anda karena saya dan moderator lainnya ingin menjadikan Jawaban WordPress sumber daya yang luar biasa bagi masyarakat alih-alih Belum lagi forum ceroboh yang sulit dibaca dan sulit menemukan jawaban seperti banyak situs lain di web.
PEMBARUAN # 2
Saya pikir Anda mungkin memiliki masalah prioritas operator dalam pernyataan if Anda, tetapi ketika saya menguji sebelum saya tidak mengalami itu. Jika berperilaku seperti yang Anda katakan maka Anda hampir pasti melakukannya, cobalah ini (maaf, saya tidak punya waktu untuk menguji ini sekarang untuk memastikan bahwa itu berfungsi):
sumber
Saya pikir saya akan menambahkan beberapa kode di sini yang memecahkan masalah saya yang terkait. Dalam kasus saya, saya mencoba untuk mendapatkan JavaScript dan css untuk memuat hanya pada Halaman dan Posting dan (edit dan buat) dan tidak ada tempat lain.
Saya telah menemukan solusi yang bisa digunakan
basename( $_SERVER[ 'SCRIPT_FILENAME' ] )
untuk menentukan di mana saya berada di backend. Saya prihatin karena ketersediaan$_SERVER[ 'SCRIPT_FILENAME' ]
mungkin bervariasi server ke server (ada yang tahu seberapa besar kemungkinan untuk$_SERVER[ 'SCRIPT_FILENAME' ]
tidak tersedia di server?)Kemudian saya menemukan pertanyaan ini dan jawaban MikeSchinkel. Dengan sedikit modifikasi saya membuatnya bekerja untuk saya kecuali untuk satu hal. Tampaknya untuk alasan apa pun ketika posting baru dibuat melalui "Tambah Baru", itu tidak berfungsi.
Dengan tweak berikut saya membuatnya bekerja dan saya berbagi di sini dengan harapan membantu orang lain dan meningkatkannya.
Selanjutnya saya mencoba membatasi beberapa skrip pada halaman opsi tema saya, yang tidak dapat dilakukan berdasarkan $ pagenow karena url yang muncul adalah admin.php? Page = themeoptions dan saya tidak ingin skrip pada setiap admin halaman .php, hanya pada halaman tertentu (halaman opsi tema saya)
Adakah yang tahu bagaimana ini sebaiknya dilakukan?
Dan untuk menjawab pertanyaan saya sendiri:
sumber
Per Justin Tadlock, Anda harus menghubungkan ke admin_enqueue_scripts yang bertentangan dengan wp_enqueue_scripts untuk plugin atau skrip admin saja:
http://justintadlock.com/archives/2011/07/12/how-to-load-javascript-in-the-wordpress-admin
sumber
Saya tahu pertanyaannya telah dijawab. Saya pikir ini adalah solusi yang lebih sederhana.
sumber
Saya membuat versi yang tidak menggunakan variabel $ typenow:
sumber
$_GET
hanya bisa gagal. Bagaimanapun: Selamat datang di WPSE.Bagaimana dengan:
sumber
Ini
tidak sepenuhnya benar. Itu memang memiliki nilai yang ditetapkan pada admin_init di sebagian besar layar jenis posting seperti Tambah Baru, daftar taksonomi, edit taksonomi dan daftar entri, tetapi tidak memiliki satu di layar "Edit YourPostType".
Juga, seperti yang ditunjukkan orang lain, kait yang benar untuk digunakan untuk menambahkan stylesheet dan skrip ke WP Admin adalah
admin_enqueue_scripts
. Jika Anda menggunakan pengait ini, Anda tidak perlu memeriksais_admin()
karena itu hanya diaktifkan di WP Admin dan Anda mendapatkan sebagai parameter layar saat ini. http://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scriptssumber