Katakanlah Anda perlu membuat kode javascript atau CSS yang tergantung pada konteks saat ini.
Misalnya Anda memiliki formulir di beranda yang mengirimkan permintaan ajax saat mengirim, dan formulir lain di satu halaman. Atau dalam hal CSS, Anda ingin membuat tema yang memungkinkan penggunanya untuk membangun tata letak mereka sendiri, mengubah warna dll.
Solusi yang saya lihat sejauh ini:
Sertakan kode di bagian kepala dokumen (atau di akhir dalam kasus JS)
Lakukan permintaan khusus yang menampilkan kode, seperti site.com?get_assets . Ini lambat karena WP dimuat dua kali.
Simpan dalam file sementara untuk jangka waktu tertentu, dan muat dari sana. Tidak terlalu andal untuk tema atau plugin publik.
Hanya Javascript - membuatnya statis dengan memasukkannya ke dalam file normal yang dimuat setiap waktu. Dalam hal ini Anda harus membuat kode Anda menangani situasi apa pun
Apakah kamu kenal orang lain? Kemana Anda akan pergi?
sumber
Jawaban:
Satu opsi tambahan, tergantung pada jenis parameter yang perlu Anda lewati. Sebut saja (2a). Anda juga dapat membuat skrip PHP yang menghasilkan
text/css
atau menghasilkan secara dinamistext/javascript
bukantext/html
, dan memberikan mereka data yang mereka butuhkan menggunakan parameter GET bukan oleh loading WordPress. Tentu saja ini hanya berfungsi jika Anda perlu memasukkan sejumlah kecil parameter yang relatif kompak. Jadi, misalnya, Anda hanya perlu memasukkan URL kiriman atau direktori file atau sejenisnya, Anda dapat melakukan sesuatu seperti ini:Di header.php:
Dalam fancy-js.php:
dll.
Tetapi ini hanya memungkinkan Anda mengakses data yang secara langsung diteruskan dalam parameter GET; dan itu hanya akan berfungsi jika jumlah hal yang perlu Anda lewati relatif kecil, dan representasi dari hal-hal itu relatif kompak. (Pada dasarnya beberapa string atau nilai numerik - nama pengguna, katakanlah, atau direktori; bukan daftar semua posting terbaru pengguna atau sesuatu seperti itu.)
Adapun yang salah satu dari opsi ini adalah yang terbaik - saya tidak tahu; itu tergantung pada kasus penggunaan Anda. Opsi (1) memiliki kelebihan yaitu sederhana, dan jelas memungkinkan Anda mengakses data WordPress apa pun yang mungkin Anda perlukan, tanpa kinerja menekan memuat WordPress dua kali. Ini hampir pasti apa yang harus Anda lakukan kecuali Anda memiliki alasan kuat untuk tidak melakukannya (misalnya karena ukuran stylesheet atau skrip yang perlu Anda gunakan).
Jika ukurannya menjadi cukup besar untuk menyebabkan masalah dalam hal berat satu halaman Anda, maka Anda dapat mencoba (2) atau (2a).
Atau yang lain - ini mungkin ide yang lebih baik - Anda dapat mencoba memisahkan bagian-bagian dari skrip atau stylesheet yang benar-benar memanfaatkan data dinamis dari bagian-bagian yang dapat ditentukan secara statis. Katakanlah Anda memiliki stylesheet yang perlu melewati direktori dari WordPress untuk menetapkan parameter latar belakang untuk elemen # my-fancy. Anda bisa memasukkan semua ini ke elemen kepala:
Tetapi mengapa Anda perlu melakukan itu? Hanya ada satu baris di sini yang bergantung pada data dari WordPress. Lebih baik membagi hanya garis-garis yang bergantung pada WordPress:
Tempatkan semua yang lain di stylesheet statis yang Anda muat dengan elemen tautan standar (style.css atau apa pun):
Dan biarkan kaskade melakukan pekerjaan.
Hal yang sama berlaku untuk JavaScript: daripada melakukan ini:
Alih-alih meletakkan sesuatu seperti ini di elemen kepala:
Dan kemudian masukkan sisanya ke file JavaScript statis, menulis ulang my_huge_function () dan my_other_function () untuk memanfaatkan global WordPressPostData.url dan WordPressPostData.author.
40K CSS atau 40K JS hampir selalu dapat dibagi menjadi <1K yang sebenarnya tergantung pada data dinamis, dan sisanya, yang dapat ditentukan dalam file eksternal statis dan kemudian dikombinasi ulang menggunakan kaskade (untuk CSS) atau dapat diakses secara global variabel (global, elemen DOM, atau lubang cubby apa pun yang Anda inginkan, untuk JS).
sumber
Kasing CSS dinamis cukup sederhana.
Cukup buat fungsi yang menampilkan definisi CSS dinamis di dalam
<style type="text/css"></style>
tag, lalu kaitkan fungsi ituwp_print_styles
. misalnyaAtau, katakanlah Anda memiliki skema warna yang sudah dikonfigurasi sebelumnya; Anda dapat menentukan lembar gaya yang sesuai sesuai dengan pengaturan pengguna saat ini:
Perhatikan bahwa, dalam hal ini, fungsi kait ke
wp_enqueue_scripts
, karena WordPress tidak memilikiwp_enqueue_styles
kait tindakan.sumber
Aku memikirkan itu untuk sementara waktu sekarang. Pertanyaan Anda membuat saya kembali ke sana. Tidak yakin itu ide yang bagus atau tidak, jadi saya ingin komentar pakar tentang itu.
Bagaimana jika saya menulis file javascript / css melalui php ketika admin menyimpan data. Ini akan menjadi penulisan satu kali sampai pengguna mengubah tata letak lagi (yang pengguna mungkin tidak melakukannya terlalu sering). Dengan begitu kita mengakses basis data untuk pengaturan pengguna hanya sekali ketika pengguna menyimpan data.
Setelah menulis file itu akan menjadi file javascript / css biasa sehingga kita tidak perlu memanggil database setiap kali memuat tema.
Satu pertanyaan yang perlu dijawab: Apa yang akan terjadi ketika pengunjung mencoba mengakses situs secara instan ketika php menulis file?
Biarkan aku tahu apa yang kamu pikirkan.
sumber
wp-content/uploads
(satu-satunya direktori dijamin dapat ditulis dari kode WP), itu bisa menjadi pendekatan yang layak. Saya pikir bahkan WP Core menggunakan teknik ini untuk satu file js.Untuk skrip kecil, yang mungkin tidak ingin Anda sertakan dalam file terpisah, misalnya karena dihasilkan secara dinamis, WordPress 4.5 dan penawaran lebih lanjut
wp_add_inline_script
. Fungsi ini pada dasarnya mengaitkan skrip ke skrip lain. Katakanlah, misalnya, bahwa Anda sedang mengembangkan tema dan ingin pelanggan Anda dapat menyisipkan skripnya sendiri (seperti Google Analytics atau AddThis) melalui halaman opsi. Contoh .Untuk gaya ada
wp_add_inline_style
, yang pada dasarnya berfungsi sama. Anda akan menggunakannya, misalnya, untuk mengulang-ulang semua mod penyesuai Anda, dan mengumpulkan mereka dalam string yang disebut$all_mods
, yang kemudian Anda tambahkan seperti ini ke stylesheet utama Anda:sumber
Buat file JS.php dinamis dan beri makan query_vars penting untuk itu. Variabel-variabel di dalam
$_GET
akan membantu file menentukan konteks dan di dalamnya Anda dapat menyimpan dan menggunakannyareadfile()
untuk permintaan di masa depan ... lakukan apa saja.Pastikan saja file tersebut memuat
wp-load.php
sebelum apa pun, sehingga Anda memiliki akses ke fungsi WP. Gunakan jalur relatif ke folder saat ini(dirname(__FILE__))
atau cukup digg turun dalam struktur folder untuk mencariwp-load.php
terlepas dari penempatan plugin.Kode untuk mencari wp-load.php dari mana saja
Cheers, Scribu!
PS : Untuk struktur yang rumit di mana folder tidak mengikuti struktur dekremental WP normal, plugin induk dapat berbagi informasi dengan file yang dapat diakses langsung. Sebuah plugin orang tua yang datang dengan file PHP yang dinamis yang membuat CSS / JS dapat menulis ke dalam file
realpath()
dariwp-load.php
dan file standalone bisa menggunakan itu. Ini akan menjadi masalah bagi 0,1% pengguna WP. Saya pikir mereka yang memindahkan folder dan tidak mengikuti struktur normal tahu apa yang mereka lakukan dan mungkin dapat plugin PIMP yang perlu dimuatwp-load.php
secara langsung.sumber
wp-load.php
dari file tema atau plugin, karena direktoriwp-content
dan / atauplugins
direktori bisa berada di mana saja relatif terhadap direktori WP root. Ingat WP_CONTENT_DIR dan WP_PLUGINS_DIR.