Jak dodać niestandardowe opcje bloga do nowego formularza konfiguracji bloga?

17

Wydaje się to dość prostym wymogiem, ale walczę:

  1. Chcę dodać pole opcji do „Dodaj nową witrynę” .
    Prosta opcja tekstowa jest w porządku. Jak mam to zrobic?

  2. Muszę zapisać tę niestandardową opcję blogu podczas tworzenia witryny.

    Wiem, że mogę użyć haka „wpmu_new_blog”, który przekazuje $metazmienną z podanymi opcjami, ale zastanawiam się, czy istnieje sposób, aby to wszystko zrobić w jednym kroku, więc nie muszę wykonywać kolejnego zapytania DB lub jeszcze gorzej , zastąpić / zastąpić cały proces tworzenia witryny?

Uwagi:

Używam WP 3.3.1 z instalacją MultiSite. Piszę wtyczkę, która zawiera listę wszystkich witryn, które pasują do określonej wartości pola niestandardowego (nazwijmy to „typ”).

Ponadto jestem doświadczonym programistą PHP, ale wciąż jestem stosunkowo nowy w hakowaniu WordPress, więc proszę założyć, że nie jestem jeszcze dogłębnie zaznajomiony ze wszystkimi różnymi funkcjami i hakami WP.

Brian Lacy
źródło

Odpowiedzi:

9

Łącząc dwie odpowiedzi (*), zrobiłem wtyczkę, aby dodać niestandardową opcję meta podczas rejestracji nowej witryny (przód i tył) i wyświetlić jej wartość w kolumnie na ekranie Witryny.

Kategorie dla wielu witryn

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj ...

(*) odniesienia do kodu

1 - WordPress + Multisite: Jak dodać niestandardowe opcje bloga do formularza Dodaj nową witrynę w Administratorze sieci? przez @dennisg

2 - Multisite: Jak dodać niestandardowe opcje bloga do nowego formularza konfiguracji bloga? przez @tbuteler

add_action('wpmu_new_blog', 'add_new_blog_field');Został połączony z dwóch odpowiedzi.

Już korzystałem z kodu kolumny identyfikatora w mojej witrynie, a także dodałem kolumnę Kategoria we wtyczce.

[aktualizacja]

Próbowałem uporządkować kolumnę kategorii, ale wydaje się prawie nierozwiązywalna ...

Zobacz to pytanie / odpowiedź: „Żądanie filtrów” i „parse_query” nie uruchamiają się w witrynach witryn.php ani link-manager.php

[aktualizacja 2]

Zmieniłem wtyczkę i teraz kategorie są sortowalne. Pierwsza wersja wtyczki jest teraz Gist (link zaktualizowany na początku), a nowa wersja pozostaje w GitHub.

brasofilo
źródło
+1 Hej, to świetnie, brasofilo! Nie mogę się doczekać, aby spróbować :)
Brian Lacy
8

Proces rejestracji w wielu witrynach nie jest łatwą modyfikacją. Ma wiele haczyków do zabawy, w przeciwieństwie do innych procesów, ale wydaje się, że nie pasują zbyt dobrze do ciężkich dostosowań, więc rozumiem twoją frustrację.

Jeśli dobrze rozumiem, nie jest to tak skomplikowane, aby osiągnąć to, czego chcesz, chociaż nie może to być jednoetapowe rozwiązanie bez zastąpienia większości domyślnego zachowania WordPress, głównie dlatego, że rejestracja (tj. Kiedy użytkownik prześle niestandardowe informacje) i aktywacja ( tzn. kiedy nowy blog zostanie faktycznie utworzony) dzieje się osobno.

Oto bardzo przybliżony kod, którego będziesz potrzebować, aby zacząć. Mam nadzieję, że poprowadzi cię we właściwym kierunku:

// 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']);
}

Pamiętać:

  1. Jeśli chcesz filtrować dane wejściowe za pomocą wtyczki, zdecydowanie sugeruję użycie wejścia select do zablokowania dostępnych opcji;
  2. Ponieważ niektóre pola są wymagane i przechodzą sprawdzanie poprawności podczas rejestracji (minimalne znaki, niedozwolone znaki dla nazwy witryny, nazwy na czarnej liście itp.), Sugerowałbym sprawdzenie dodatkowego pola na globalnej zmiennej $ _REQUEST podczas wypełniania wartości danych wejściowych przy pierwszym funkcja, aby użytkownik nie stracił danych wejściowych w przypadku odesłania go w celu ustalenia wartości domyślnych pól WordPress;
  3. Możesz oczywiście zastąpić pomysł ostatniej funkcji tym, co najbardziej odpowiada wtyczce, ale wartość pola będzie teraz dostępna z tej ostatniej funkcji, co powinno ci pomóc na drodze.

Na koniec, jeśli chcesz później przetworzyć wszystkie wartości „extra_field” ze wszystkich istniejących blogów, zdecydowanie zalecam przechowywanie informacji na jednym stole; być może użyj update_site_optionzamiast update_blog_optiontej ostatniej funkcji, tracąc identyfikator blog_id, co w takim przypadku nie jest wymagane.

W każdym razie daj nam znać, jak to idzie i powodzenia!

Tomas Buteler
źródło
Świetna pomocna odpowiedź, wiele informacji, które mogę tu dobrze wykorzystać :) Przyznam najlepszą odpowiedź brasofilo tylko dlatego, że już dostałeś nagrodę, i obie są świetnymi odpowiedziami.
Brian Lacy
Świetna odpowiedź tutaj, dziękuję. Masz pojęcie, dlaczego moje dodatkowe pole jest dodawane do opcji witryny, jeśli nie pozwolę na działanie update_blog_option ()? Powtórzyłem wartości w proces_extra_field_on_blog_signup () i exit () i zadziałało, plik dodatkowy został dodany do opcji. Ale kiedy pozwolę mu przejść bez exit (), wówczas dodatkowe pole NIE jest dodawane do opcji wp_xx_options.
thatryan
@thatryan, to dziwne ... Albo coś usuwa wartości z bazy danych (mało prawdopodobne), albo wcale nie są dodawane. Spróbuj przeprowadzić więcej testów i napisz pytanie, jeśli masz problemy z jego rozwikłaniem. Pamiętaj, że ta odpowiedź była prawdopodobnie na WordPress 3.5 lub wcześniejszą, więc mogli coś zmienić w nowszych wersjach ...
Tomas Buteler
-1

jeśli spojrzysz na kod site-new.php, uzyskałbyś już odpowiedź - i to nie jest!

Nie ma żadnych warunków sprawdzających, czy coś można dodać do formularza. Jednak przestudiowałem plik i uważam, że musisz ręcznie dodać to pole wejściowe w witrynie site-new.php i przekazać wartość jako meta w tablicy do funkcji wpmu_create_blog, którą znajdziesz gdzieś w pobliżu linii 77. NIE TESTOWANE, ale czytanie na jakiej funkcji może być to, czego szukasz.

george.n
źródło