after_setup_theme selalu berjalan

11

Saya menyiapkan tema anak untuk beberapa anggota fakultas saya, dan sebagai bagian dari tema, saya ingin beberapa plugin untuk diaktifkan pada saat tema diaktifkan. Jadi, tentu saja, saya menggunakan tindakan after_setup_theme dan memanggil fungsi pengaturan saya. Ini berfungsi dengan baik, kecuali itu berjalan pada SETIAP permintaan (admin dan sebaliknya). Saya membuktikan ini dengan menambahkan ini ke akhir fungsi pengaturan:

echo '<script type="text/javascript">alert("This action was run")</script>';

Dan sebagai hasilnya dapatkan peringatan javascript pada setiap permintaan admin dan setiap permintaan front-end (saya memiliki pengaturan jaringan, jadi jelas di situs di mana tema ini tidak aktif, itu tidak menjalankan fungsinya)

Jadi pertanyaannya adalah, apakah ini bug? Apakah saya entah bagaimana melakukan sesuatu yang salah? Berikut adalah kode lengkap yang saya gunakan:

add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
    // -- Unrelated code remove for the sake of brevity 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
    echo '<script type="text/javascript">alert("This action was run")</script>';
}

Wawasan apa pun akan sangat dihargai!

Aaron Wagner
sumber
SOLUSI: after_switch_thememelakukan persis seperti yang saya maksudkan di sini. Ini menyala setelah tema beralih ke tema Anda. Salah satu solusi yang disebutkan di bawah ini menggunakan switch_theme. Ini tidak memiliki hasil yang diinginkan, karena itu hanya terjadi pada saat beralih dari tema Anda. Referensi komentar Trac ini
Aaron Wagner
tolong posting itu sebagai jawaban , bukan sebagai komentar untuk pertanyaan Anda. :)
Chip Bennett
2
Permintaan maaf. Itu tidak akan membiarkan saya melakukan itu. Saya akan menambahkannya sebagai jawaban dalam sedikit.
Aaron Wagner

Jawaban:

8

SOLUSI: after_switch_thememelakukan persis seperti yang saya maksudkan di sini. Ini menyala setelah tema beralih ke tema Anda. Salah satu solusi yang disebutkan di bawah ini menggunakan switch_theme. Ini tidak memiliki hasil yang diinginkan, karena itu hanya terjadi pada saat beralih dari tema Anda.

Ini adalah artikel yang saya temukan sebagai referensi: http://core.trac.wordpress.org/ticket/7795#comment:29

Ini kode saya yang dimodifikasi

add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){ 
    require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
    activate_plugin('enable-media-replace/enable-media-replace.php');
    activate_plugin('seo-image/seo-friendly-images.php');
    activate_plugin('w3-total-cache/w3-total-cache.php');
}
Aaron Wagner
sumber
5

The after_setup_themetindakan dimaksudkan untuk api pada setiap beban WordPress. Ini hanyalah bagian dari proses di mana WordPress memanggil sistem template, menentukan berbagai parameter pengaturan untuk Theme, dan kemudian melanjutkan dengan pemrosesan selanjutnya, seperti menentukan template yang benar untuk ditampilkan, dll.

Dengan kata lain, itu after_setup_thememewakili titik di mana WordPress mengatur Tema saat ini, bukan titik di mana administrator mengaktifkan dan / atau mengkonfigurasi Tema saat ini.

Apa yang Anda cari adalah kait aktivasi Tema , yang saat ini tidak tersedia, tetapi sedang dalam pertimbangan / pengembangan .

Chip Bennett
sumber
Tautan entri Codex sangat menyesatkan. Ia mengatakan "Hook ini disebut selama inisialisasi tema." Itu berarti, bagi saya, bahwa kait harus dipanggil ketika diaktifkan. Saya mengerti apa yang Anda katakan. Sangat menyesatkan.
Aaron Wagner
5
init !== activation. Biasanya Anda memanggil __construct()fungsi di php juga sebuah initfungsi. Itu berarti: Inisialisasi instance.
kaiser
Tiket trac berusia 7 tahun dan sepertinya tidak akan diperbaiki!
numediaweb
4

Sayangnya tidak ada kait tema-aktivasi. Namun, pertanyaan ini memang memberikan solusi untuk itu.

Cukup gunakan 'kait aktivasi tema' untuk mengaktifkan plug-in.

Solusi yang lebih baik, sepanjang nada yang sama adalah yang ini . Keduanya pada dasarnya menggunakan switch_themepengait.


Sesuai komentar OP dan tiket trac terkait - after_switch_themeadalah kail yang diperlukan.

Ini melewati nama tema lama sebagai argumen. Namun, jika ini ada di Anda functions.php(yang seharusnya ...) callback hanya akan aktif ketika tema Anda sedang diaktifkan .

add_action( 'after_switch_theme', 'wpse50298_setup' );
function wpse50298_setup($theme_switching_from){
    // Your theme is being activated
}

Demikian pula menambahkan callback switch_themehanya akan dipanggil ketika tema Anda dinonaktifkan.

add_action( 'switch_theme', 'wpse50298_deactivate' );
function wpse50298_deactivate($theme_switching_to){
    // Your theme is being deactivated
}
Stephen Harris
sumber
Tak satu pun dari opsi ini bekerja untuk saya. switch_themehanya berfungsi setelah menonaktifkan tema. Namun, after_switch_themeberhasil dengan sempurna.
Aaron Wagner
1
jawaban yang diperbarui :)
Stephen Harris
switch_theme tampaknya tidak berfungsi lagi. Saya pikir itu karena perubahan dalam aktivasi 3,4. Setidaknya itu tidak bekerja untuk saya.
Jake
after_switch_theme berfungsi sempurna. Ini harus menjadi jawaban yang diterima. Saya menggunakan WP 3.5
Ardee Aram
0

Solusi yang lebih baik mungkin menggunakan skrip aktivasi plugin Thomas Griffin . Ini akan meminta pengguna memasang plugin pilihan Anda saat tema sedang digunakan. Saya pikir ini adalah cara yang bagus untuk memisahkan plugin dari tema, dan masih bisa menggunakannya.

Di dalam tema Anda, periksa apakah plugin itu aktif sebelum menggunakan fungsinya. Ini akan memungkinkan pengguna lebih banyak pilihan dan kontrol.

Anda dapat mengatur skrip aktivasi dengan mudah dengan Knapsack .

Jeff Sebring
sumber
3
Jawaban harus lebih dari sekadar tautan ke situs eksternal . Silakan tambahkan solusinya.
fuxia
0

Perbaikan terbaik Anda sekarang adalah dengan menggunakan switch_themehook dan filter argumen '$ theme' yang disahkan untuk melihat apakah itu yang sekarang maka jika tidak kembali;

function nw_update_network($theme) {
   if ($theme !== 'my_theme_name') return;

   // Your code here
}

add_action('switch_theme', 'nw_update_network');
numediaweb
sumber