Jeśli spojrzysz na stronę source code strony "Dodaj nową witrynę", możesz zauważyć, że WordPress nie zapewnia w tym celu haka. Oczywiście, możliwe jest dodanie haka samemu, ale ogólnie jest to zła praktyka do edycji rdzenia WordPress.
Jednak po przesłaniu i wyświetleniu wszystkich informacji strona wywołuje funkcję wpmu_create_blog(). W tej funkcji jest nazywany haczyk, a mianowicie działanie wpmu_new_blog
:
do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta);
W tym momencie blog jest już utworzony. Jednak wciąż możemy wykryć, czy pole zostało przesłane przez zahaczenie o tę akcję i zapisanie jej w bazie danych. Do naszego pliku wtyczki (lub szablonu) dodajemy:
function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) {
// Make sure the user can perform this action and the request came from the correct page.
switch_to_blog($blog_id);
// Use a default value here if the field was not submitted.
$new_field_value = 'default';
if (!empty($_POST['blog']['new_field']))
$new_field_value = $_POST['blog']['new_field'];
// save option into the database
update_option('new_field', $new_field_value);
restore_current_blog();
}
add_action('wpmu_new_blog', 'add_new_blog_field');
Jeśli chodzi o wyświetlanie pola na stronie, można zastosować podejście JavaScript.Dodajesz plik javascript wyłącznie do strony "Dodaj nową witrynę", a na stronie Ładowanie strony wstawiasz pole do właściwej pozycji na stronie. Powinieneś dodać pole wejściowe o nazwie "blog [new_field]". Tworzymy następujący plik JavaScript, który po załadowaniu, dodaje nowe pole do strony „Dodaj nową witrynę”:
(function($) {
$(document).ready(function() {
$('<tr class="form-field form-required"></tr>').append(
$('<th scope="row">New field</th>')
).append(
$('<td></td>').append(
$('<input class="regular-text" type="text" title="New Field" name="blog[new_field]">')
).append(
$('<p>Explanation about your new field</p>')
)
).insertAfter('#wpbody-content table tr:eq(2)');
});
})(jQuery);
Teraz jedyną rzeczą do zrobienia jest to ten plik na stronie „Dodaj nową witrynę” , dodając to do pliku wtyczki:
// Only add the script for the page site-new.php (the page hook).
add_action("admin_print_scripts-site-new.php", 'my_admin_scripts');
function my_admin_scripts() {
wp_register_script('yourScript', plugins_url('js/yourScript.js', __FILE__));
wp_enqueue_script('yourScript');
}
Dalsze sugestia może być, w zależności od potrzeb: Dodaj pole wejściowe na stronie ustawień ogólnych, stosując add_settings_field, takie, że użytkownik może go edytować później (a może tylko jeśli jest to domyślne ustawienie dla tego pola). "Nie można zmienić tego pola później".
Mam nadzieję, że jest to pomoc, której potrzebujesz.
Dzięki, to naprawdę świetna odpowiedź! Godny +100 :) –
Bardzo ładna, ale jedna mała zmiana: 'if (! Empty ($ _ POST ['blog'] ['new_field'])) $ new_field_value = $ _POST ['blog'] ['new_field ']; 'for' if (! isset ($ _ POST [' blog '] [' new_field '])) zwraca FALSE; '... Weź pod uwagę pustą wartość new_field, która może zostać zaakceptowana jako poprawna wartość – Mariyo
Od WP 4.5, hak akcji znajduje się wewnątrz znacznika formularza witryny new.php o nazwie "network_site_new_form". – Berend