Wie füge ich benutzerdefinierte Blog-Optionen zum neuen Blog-Setup-Formular hinzu?

17

Scheint einfach genug, aber ich habe Probleme:

  1. Ich möchte der "Add New Site" ein Optionsfeld hinzufügen .
    Eine einfache Textoption ist in Ordnung. Wie mache ich das?

  2. Ich muss diese benutzerdefinierte Blog-Option speichern, wenn die Site erstellt wird.

    Ich weiß, dass ich den 'wpmu_new_blog'-Hook verwenden kann, der die $metaVariable mit den angegebenen Optionen übergibt , aber ich frage mich, ob es eine Möglichkeit gibt, dies alles in einem Schritt zu tun, damit ich keine weitere DB-Abfrage ausführen muss oder noch schlimmer , den gesamten Site-Erstellungsprozess überschreiben / ersetzen?

Anmerkungen:

Ich verwende WP 3.3.1 mit einem MultiSite-Setup. Ich schreibe ein Plugin, das alle Sites auflistet, die dem angegebenen benutzerdefinierten Feldwert entsprechen (nennen wir es "Typ").

Außerdem bin ich ein erfahrener PHP-Entwickler, aber ich bin noch relativ neu in WordPress-Hacking, also nehmen Sie bitte an, dass ich noch nicht mit allen verschiedenen WP-Funktionen und -Hooks vertraut bin.

Brian Lacy
quelle

Antworten:

9

Zusammen mit zwei Antworten (*) habe ich ein Plugin erstellt, um beim Registrieren einer neuen Site (Frontend und Backend) eine benutzerdefinierte Metaoption hinzuzufügen und deren Wert in einer Spalte im Bildschirm Sites anzuzeigen.

Kategorien mit mehreren Standorten

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben ...

(*) Code-Referenzen

1 - WordPress + Multisite: Wie füge ich benutzerdefinierte Blog-Optionen zum Formular "Neue Site hinzufügen" in Network Admin hinzu? , von @dennisg

2 - Multisite: Wie füge ich benutzerdefinierte Blog-Optionen zum neuen Blog-Setup-Formular hinzu? , von @tbuteler

Das add_action('wpmu_new_blog', 'add_new_blog_field');wurde aus den beiden Antworten zusammengeführt.

Ich habe bereits den ID-Spaltencode in meiner Multisite verwendet und auch die Kategorie-Spalte im Plugin hinzugefügt.

[aktualisieren]

Es wurde versucht, die Kategoriespalte sortierbar zu machen, dies scheint jedoch fast unlösbar zu sein ...

Siehe diese Frage / Antwort: Die Filter 'request' und 'parse_query' werden weder in sites.php noch in link-manager.php ausgelöst

[Update 2]

Ich habe das Plugin überarbeitet und jetzt sind die Kategorien sortierbar. Die erste Version des Plugins ist jetzt ein Gist (Link am Anfang aktualisiert) und die neue Version bleibt in GitHub.

Brasofilo
quelle
+1 Hey, das ist großartig, Brasofilo! Ich freue mich darauf, es zu versuchen :)
Brian Lacy
8

Der Multisite-Anmeldevorgang ist nicht einfach zu optimieren. Im Gegensatz zu anderen Prozessen hat es viele Haken, mit denen man spielen kann, aber sie scheinen für umfangreiche Anpassungen nicht allzu gut zusammen zu passen, daher verstehe ich Ihre Frustration.

Wenn ich richtig verstehe, ist es nicht so kompliziert zu erreichen, was Sie wollen, obwohl es keine Ein-Schritt-Lösung sein kann, ohne einen Großteil des Standardverhaltens von WordPress außer Kraft zu setzen, hauptsächlich, weil die Anmeldung (dh wenn Ihr Benutzer die benutzerdefinierten Informationen übermittelt) und die Aktivierung ( dh wann der neue Blog tatsächlich erstellt wird) separat passieren.

Hier ist ein sehr grober Code, den Sie benötigen, um loszulegen. Hoffentlich lenkt es Sie in die richtige Richtung:

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

Merken Sie sich:

  1. Wenn Sie die Eingabe über ein Plug-In filtern möchten, empfehle ich dringend, einen ausgewählten Eingang zu verwenden, um die verfügbaren Optionen zu sperren.
  2. Da einige Felder erforderlich sind und während der Registrierung die Gültigkeitsprüfung durchlaufen (minimale Zeichen, unzulässige Zeichen für den Site-Namen, Namen auf der schwarzen Liste usw.), würde ich empfehlen, beim Ausfüllen des Werts der Eingabe im ersten Feld auf Ihr zusätzliches Feld im globalen Feld $ _REQUEST zu prüfen Funktion, damit der Benutzer seine Eingabe nicht verliert, falls er zurückgeschickt wird, um den Wert der Standardfelder von WordPress zu korrigieren;
  3. Sie können natürlich die Idee der letzten Funktion durch die ersetzen, die am besten zu Ihrem Plug-In passt, aber der Feldwert wird jetzt in dieser letzten Funktion verfügbar sein, was Ihnen auf Ihrem Weg helfen sollte.

Wenn Sie abschließend alle 'extra_field'-Werte aus allen vorhandenen Blogs später verarbeiten möchten, empfehle ich dringend, die Informationen in einer einzelnen Tabelle zu speichern. Verwenden Sie update_site_optionstattdessen update_blog_optiondie letzte Funktion und verlieren Sie die blog_id, die in diesem Fall nicht erforderlich ist.

Wie auch immer, lass es uns wissen und viel Glück!

Tomas Buteler
quelle
Tolle hilfreiche Antwort, viele Informationen, die ich hier gut gebrauchen kann :) Ich gewähre brasofilo die beste Antwort, nur weil Sie bereits das Kopfgeld erhalten haben und beide großartige Antworten sind.
Brian Lacy
Super Antwort hier, danke. Gibt es eine Idee, warum mein zusätzliches Feld zu den Site-Optionen hinzugefügt wird, wenn ich update_blog_option () nicht ausführen lasse? Ich habe die Werte in process_extra_field_on_blog_signup () und exit () ausgegeben und es hat funktioniert, das extra_filed wurde zu options hinzugefügt. Aber wenn ich es einfach ohne exit () durchlaufen lasse, wird das extra_field NICHT zu wp_xx_options hinzugefügt.
Thyryan
@thatryan, das ist seltsam ... Entweder werden die Werte aus der Datenbank entfernt (nicht wahrscheinlich), oder sie werden überhaupt nicht hinzugefügt. Versuchen Sie, weitere Tests durchzuführen, und posten Sie eine Frage, wenn Sie Probleme haben, diese zu ermitteln. Denken Sie daran, dass diese Antwort wahrscheinlich für WordPress 3.5 oder früher war, so dass sie möglicherweise etwas in neueren Versionen geändert haben ...
Tomas Buteler
-1

Wenn Sie sich site-new.php-Code ansehen, haben Sie Ihre Antwort bereits erhalten - und das ist nein!

Es gibt keine Bedingungen, die prüfen, ob dem Formular etwas hinzugefügt werden kann. Allerdings habe ich die Datei studiert und bin der Meinung, dass Sie dieses Eingabefeld in site-new.php manuell hinzufügen und den Wert als Meta im Array an die Funktion wpmu_create_blog übergeben müssen, die Sie irgendwo in der Nähe von Zeile 77 finden. NICHT TESTED, sondern reading Auf was die Funktion es tut, kann sein, was Sie suchen.

george.n
quelle