2012-04-26 22 views
16

W instalacji WordPress wielu serwerach Mam dostosowywania, muszę dodać prosty pole tekstowe na formularzu zgłoszeniowym do tworzenia nowych miejsc blogu, który znajduje się naWordPress + Multisite: Jak dodać niestandardowe opcje blogu, aby dodać nowy formularz witryny w Network Admin?

Network Admin > Sites > Add New

Oczywiście muszę to pole, aby uzyskać zapisane razem z innymi meta danymi z tego formularza, w tabeli {new_blog_prefix}_options.

Jestem szczególnie zainteresowany najprostszą, najprostszą i/lub "właściwą drogą" (tj. Sposobem WordPress), aby to osiągnąć, ale ja zadowoli mnie sposób, który działa ™!

Jak dotąd napotkane liczne ślepe zaułki w moich badań:

  • Settings API - [WP Codex]

    O ile mogę powiedzieć, Settings API (a)może nie działa dla sekcji Administrator sieci (chociaż mogło to ulec zmianie w najnowszej wersji WP); Ponadto, (b) wydaje się, że to pozwala tylko dodawać/modyfikować ekrany w sekcji Settings Pulpitu nawigacyjnego.

  • wpmu_options hak - [Hooks DB]

    wydaje się być haczyk wyłącznie za dodanie opcji do ekranu Ustawienia sieci.

  • add_site_option/add_blog_option - [WP Codex]

    Sąsiednie można znaleźć; Wydaje się, że pozwala on dodawać opcje specyficzne dla witryny do tabeli {blogsite_prefix}_options, ale nadal nie pomaga w dodawaniu opcji do formularza administratora.

Więc ... żadnych kości. Każda pomoc jest doceniana!

Odpowiedz

27

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.

+1

Dzięki, to naprawdę świetna odpowiedź! Godny +100 :) –

+0

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

+1

Od WP 4.5, hak akcji znajduje się wewnątrz znacznika formularza witryny new.php o nazwie "network_site_new_form". – Berend

Powiązane problemy