Masalah
Kita semua berada dalam situasi seperti ini, dan banyak pertanyaan di situs ini membutuhkan solusi seperti ini. Anda harus memperbarui basis data, memasukkan banyak data secara otomatis, mengonversi meta_keys
, atau yang serupa.
Tentu saja, dalam sistem yang berjalan berdasarkan praktik terbaik ini seharusnya tidak terjadi.
Tetapi seperti itu, saya ingin mendengar solusi pribadi Anda untuk masalah ini, dan mengapa Anda memilih solusi Anda.
Pertanyaan
Bagaimana Anda menerapkan skrip satu kali di instalasi WordPress Anda yang sedang berjalan?
Masalahnya di sini terutama karena alasan berikut:
- Skrip yang memasukkan data tidak boleh berjalan lebih dari satu kali
- Skrip yang membutuhkan banyak sumber daya tidak boleh dijalankan pada saat mereka tidak dapat dimonitor
- Mereka seharusnya tidak dijalankan secara tidak sengaja
Alasan saya bertanya
Saya sudah mendapat latihan sendiri, saya akan mempostingnya di jawaban. Karena saya tidak tahu apakah itu solusi terbaik di luar sana, saya ingin tahu tentang Anda. Juga, ini adalah pertanyaan yang sering ditanyakan dalam konteks pertanyaan lain, dan alangkah baiknya memiliki sumber daya yang mengumpulkan ide-ide.
menantikan untuk belajar dari Anda :)
sumber
wp-cron
acara terjadwal.Jawaban:
Saya sendiri menggunakan kombinasi:
Struktur
Saya menggunakan file (
onetime.php
) di folder sertakan sayainc
, yang termasuk dalamfunctions.php
, dan dihapus dari sana setelah digunakan.File untuk skrip itu sendiri
Dalam
onetime.php
fungsi sayaf711_my_onetime_function()
ditempatkan. Karena bisa jadi fungsi apa saja. Saya menganggap skrip Anda telah diuji dan berfungsi dengan benar.Untuk mencapai kontrol atas eksekusi skrip, saya menggunakan keduanya
Kontrol kemampuan
Untuk menghentikan pengguna lain yang tidak sengaja mengeksekusi skrip saya:
atau
sementara
untuk menghentikan diri saya sendiri secara tidak sengaja mengeksekusi skrip lebih dari sekali.
File untuk mengeksekusi skrip di fungsi saya
f711_my_onetime_function()
akan terlihat seperti itu:Alasan saya mengatur transient segera setelah pemeriksaan jika ada adalah bahwa saya ingin fungsi dieksekusi setelah skrip dikunci dari beeing digunakan dua kali.
Jika saya memerlukan output dari fungsi saya, saya mencetaknya sebagai komentar di catatan kaki, atau kadang-kadang saya bahkan memfilter konten.
Waktu penguncian diatur ke 10 Menit, tetapi dapat disesuaikan dengan kebutuhan Anda.
Membersihkan
Setelah eksekusi skrip saya berhasil, saya menghapus
include
darifunctions.php
, dan menghapusonetime.php
dari server. Karena saya menggunakan batas waktu untuk transient, saya tidak perlu membersihkan database, tetapi tentu saja Anda juga bisa menghapus transient setelah Anda menghapus file.sumber
Anda juga dapat melakukan ini:
jalankan
onetime.php
dan ganti nama setelah eksekusi.sumber
Saya membuat skrip baris perintah Phing untuk ini, tidak ada yang istimewa selain memuat skrip eksternal untuk dijalankan. Alasan saya menggunakannya melalui CLI adalah karena:
Jadi Anda bisa menggunakan Phing, atau PHP CLI dan tidur di malam hari. WP-CLI juga merupakan alternatif yang baik meskipun saya lupa jika Anda dapat menggunakannya di luar root web.
Karena ini adalah posting populer di sini adalah contoh skrip: https://github.com/wycks/WordPhing (run.php)
sumber
Cara lain yang cukup sederhana untuk menjalankan skrip satu kali adalah dengan melakukan ini dengan menggunakan plugin MU.
Masukkan kode dalam beberapa file PHP (mis.,
one-time.php
) Yang Anda unggah ke folder plugin MU Anda (secara default/wp-content/mu-plugins
), sesuaikan izin file, jalankan plugin (yaitu, sesuai dengan kail yang Anda pilih, Anda pada dasarnya hanya harus mengunjungi frontend / backend), dan Anda sudah selesai.Berikut adalah boilerplate:
Tanpa komentar dan hal-hal, itu hanya terlihat seperti ini:
sumber
Dalam kondisi ideal saya akan ssh ke server dan menjalankan fungsinya sendiri menggunakan wp-cli.
Ini sering tidak mungkin, jadi saya cenderung untuk menetapkan variabel $ _GET dan menghubungkannya ke 'init', misalnya:
lalu tekan
dan nonaktifkan kail setelah selesai.
sumber
Terkadang saya menggunakan fungsi yang dikaitkan pada penonaktifan plugin.
Lihat di sini Perbarui Tautan Lama Ke Pretty Tautkan Jenis Tulisan Kustom
Setelah hanya admin yang dapat mengaktifkan plugin, ada pemeriksaan kemampuan sebagai efek samping.
Tidak perlu menghapus file begitu dinonaktifkan tidak akan disertakan oleh wordress. Dalam kecanduan jika Anda ingin menjalankannya lagi Anda bisa. Mengaktifkan dan menonaktifkan lagi.
Dan terkadang saya menggunakan transient yang digunakan seperti pada jawaban @fischi. Misalnya di sini kueri untuk membuat produk woocommerce dari gambar atau di sini Hapus / ganti tag img dalam konten posting untuk posting yang dipublikasikan secara otomatis
Kombinasi keduanya bisa menjadi alternatif.
sumber
Pasti Anda bisa, Cukup buat kode waktu Anda sebagai plugin.
Masalah bagaimana cara mengaktifkan plugin ini tanpa mengklik tautan Aktifkan?
hanya menambahkan
activate_plugins('onetime/index.php');
difunctions.php
atau Penggunaan harus menggunakan plugin, http://codex.wordpress.org/Must_Use_Plugins
Coba dengan tindakan berbeda seperti ketika Anda ingin menjalankan plugin sekali pakai,
admin_init - setelah admin init
init - wordpress init
wp - saat wordpress dimuat
sumber
Cara lain adalah dengan menetapkan global wp_option ketika pekerjaan selesai dan periksa opsi itu setiap kali init hook dieksekusi.
Tentu saja Anda tidak perlu memiliki kode ini selamanya (bahkan jika itu adalah bacaan sederhana dari database), jadi Anda mungkin dapat menghapus kode ketika pekerjaan selesai. Anda juga dapat secara manual mengubah nilai opsi ini menjadi 0 jika Anda perlu menjalankan kembali kode tersebut.
sumber
Pendekatan saya sedikit berbeda dalam hal ini. Saya ingin menambahkan skrip satu kali sebagai fungsi dalam function.php tema saya dan menjalankannya pada kueri GET tertentu.
Untuk menjalankan ini, cukup kunjungi URL "www.sitename.com/?linkupdate"
Ini bekerja dengan baik untuk saya sampai sekarang ...
Apakah metode ini memiliki kekurangan? Hanya ingin tahu...
sumber
Saya hanya menggunakan satu halaman templat produk khusus yang tidak saya gunakan dan tidak terhubung dengan apa pun di server publik.
Seperti jika saya memiliki halaman testimonial yang tidak langsung (dalam mode konsep, atau apa pun), tetapi terhubung ke template halaman tunggal, misalnya
single-testimonial.php
- Saya dapat menempatkan fungsi di sana, memuat halaman melalui apreview
dan fungsi atau apa pun yang ada diluncurkan sekali. Ini juga sangat mudah untuk membuat modifikasi pada fungsi jika terjadi debugging.Sangat mudah dan saya lebih suka daripada menggunakan
init
karena saya memiliki lebih banyak kontrol kapan dan bagaimana diluncurkan. Hanya preferensi saya.sumber
Kalau-kalau itu membantu, ini adalah apa yang saya lakukan dan itu bekerja dengan baik:
sumber