Bagaimana cara menambahkan Opsi Blog Kustom ke formulir pengaturan blog baru?

17

Sepertinya persyaratan yang cukup sederhana, tapi saya berjuang:

  1. Saya ingin menambahkan bidang opsi ke "Tambahkan Situs Baru" .
    Opsi teks sederhana tidak masalah. Bagaimana saya melakukan ini?

  2. Saya perlu menyimpan opsi blog khusus ini ketika situs dibuat.

    Saya tahu saya bisa menggunakan pengait 'wpmu_new_blog', yang meneruskan $metavariabel dengan opsi yang disediakan, tapi saya ingin tahu apakah ada cara untuk melakukan ini semua dalam satu langkah jadi saya tidak harus melakukan permintaan DB lain, atau lebih buruk lagi , ganti / ganti seluruh proses pembuatan situs?

Catatan:

Saya menggunakan WP 3.3.1 dengan pengaturan MultiSite. Saya sedang menulis plugin yang mencantumkan semua Situs yang cocok dengan nilai bidang khusus yang ditentukan (sebut saja "ketik").

Juga, saya adalah pengembang PHP yang berpengalaman tetapi saya masih relatif baru untuk peretasan WordPress, jadi tolong anggap saya belum akrab dengan semua fungsi dan kait WP.

Brian Lacy
sumber

Jawaban:

9

Menggabungkan dua jawaban (*), saya telah melakukan plugin untuk menambahkan opsi meta khusus ketika mendaftarkan situs baru (depan dan belakang) dan menampilkan nilainya dalam kolom di layar Situs.

Kategori Multisite

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini ...

(*) referensi kode

1 - WordPress + Multisite: Bagaimana cara menambahkan opsi blog khusus ke Tambah formulir Situs Baru di Admin Jaringan? , oleh @dennisg

2 - Multisite: Bagaimana cara menambahkan Opsi Blog Kustom ke formulir pengaturan blog baru? , oleh @tbuteler

Itu add_action('wpmu_new_blog', 'add_new_blog_field');digabung dari dua jawaban.

Saya sudah menggunakan kode kolom ID di multisite saya, dan juga menambahkan kolom Category di plugin.

[memperbarui]

Mencoba membuat kolom Kategori dapat diurutkan, tetapi tampaknya hampir tidak dapat dipecahkan ...

Lihat pertanyaan / jawaban ini: Filter 'permintaan' dan 'parse_query' tidak diaktifkan di sites.php atau tautan-manager.php

[perbarui 2]

Saya telah mengerjakan ulang plugin dan sekarang kategorinya dapat diurutkan. Versi pertama plugin adalah Gist sekarang (tautan diperbarui di awal) dan versi baru tetap di GitHub.

brasofilo
sumber
+1 Hei ini hebat, brasofilo! Saya menantikan untuk mencoba ini :)
Brian Lacy
8

Proses pendaftaran Multisite bukan hal yang mudah untuk di-tweak. Memang ada banyak kait untuk dimainkan, tidak seperti proses lainnya, tetapi mereka tampaknya tidak cocok untuk kustomisasi berat, jadi saya mengerti frustrasi Anda.

Jika saya mengerti dengan benar, itu tidak terlalu sulit untuk mencapai apa yang Anda inginkan, meskipun itu tidak bisa menjadi solusi satu langkah tanpa mengesampingkan banyak perilaku default WordPress, terutama karena pendaftaran (yaitu ketika pengguna Anda akan mengirimkan informasi khusus) dan aktivasi ( yaitu ketika blog baru benar-benar akan dibuat) terjadi secara terpisah.

Berikut adalah kode yang sangat kasar yang harus Anda mulai. Semoga ini mengarahkan Anda ke arah yang benar:

// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
    <label>An extra field</label>
    <input type="text" name="extra_field" value="" />
<?php
}

// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
    if(isset($_REQUEST['extra_field'])) {
        $meta['extra_field'] = $_REQUEST['extra_field'];
    }
    return $meta;
}

// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}

Ingatlah:

  1. Jika Anda ingin memfilter input melalui plug-in, saya akan sangat menyarankan menggunakan input pilih untuk mengunci opsi yang disediakan;
  2. Karena beberapa bidang diperlukan dan melewati validasi selama pendaftaran (karakter minimum, karakter yang tidak diizinkan untuk nama situs, nama daftar hitam, dll), saya akan menyarankan memeriksa bidang tambahan Anda pada global $ _REQUEST saat mengisi nilai input pada yang pertama berfungsi, sehingga pengguna tidak kehilangan inputnya seandainya dia dikirim kembali untuk memperbaiki nilai bidang default WordPress;
  3. Anda jelas dapat mengganti gagasan fungsi terakhir dengan apa pun yang paling sesuai dengan plug-in Anda, tetapi nilai bidang sekarang akan tersedia dari dalam fungsi terakhir itu, yang akan membantu Anda dalam perjalanan Anda.

Pada catatan terakhir, jika Anda ingin memproses semua nilai 'extra_field' dari semua blog yang ada nanti, saya sarankan untuk menyimpan informasi di satu tabel; mungkin menggunakan update_site_optionalih-alih update_blog_optionpada fungsi terakhir itu, kehilangan blog_id, yang tidak diperlukan dalam kasus itu.

Bagaimanapun, beri tahu kami bagaimana hasilnya, dan semoga berhasil!

Tomas Buteler
sumber
Jawaban yang sangat membantu, banyak informasi yang bisa saya manfaatkan dengan baik di sini :) Saya memberikan Jawaban Terbaik untuk brasofilo hanya karena Anda sudah mendapatkan hadiahnya, dan keduanya adalah jawaban yang bagus.
Brian Lacy
Jawaban yang luar biasa di sini, terima kasih. Adakah gagasan mengapa bidang tambahan saya ditambahkan ke opsi situs jika saya tidak membiarkan update_blog_option () berjalan? Saya menyuarakan nilai-nilai di dalam process_extra_field_on_blog_signup () dan keluar () dan itu berhasil, extra_filed ditambahkan ke opsi. Tetapi ketika saya membiarkannya berjalan tanpa keluar () maka extra_field TIDAK ditambahkan ke wp_xx_options.
thatryan
@thatryan, itu aneh ... Entah ada sesuatu yang menghapus nilai dari database (tidak mungkin), atau mereka tidak ditambahkan sama sekali. Coba jalankan beberapa tes lagi dan jangan ragu untuk mengirimkan pertanyaan jika Anda kesulitan mengatasinya. Ingatlah bahwa jawaban ini mungkin untuk WordPress 3.5 atau yang lebih lama, jadi mereka mungkin telah mengubah sesuatu dalam versi yang lebih baru ...
Tomas Buteler
-1

jika Anda melihat kode situs-new.php Anda sudah mendapatkan jawaban Anda - dan itu tidak!

Tidak ada kondisi yang memeriksa untuk melihat apakah ada yang bisa ditambahkan ke formulir. Namun, saya mempelajari file tersebut dan yakin Anda harus menambahkan secara manual bidang input ini di situs-new.php dan meneruskan nilainya sebagai meta di dalam array ke fungsi wpmu_create_blog yang akan Anda temukan di suatu tempat di dekat baris 77. TIDAK DIUJI tetapi membaca pada apa fungsi itu mungkin apa yang Anda cari.

george.n
sumber