2012-04-26 7 views
16

In einer Installation Wordpress Multisite Ich Customizing, ich brauche für die Schaffung neuer Blog-Websites, ein einfaches Textfeld in das Eingabeformular hinzuzufügen, die beiWordPress + Multisite: Wie fügt man benutzerdefinierte Blog-Optionen zum Hinzufügen eines neuen Site-Formulars in Network Admin hinzu?

Network Admin > Sites > Add New

natürlich dieses Feld muss ich bekommen entfernt zusammen mit den anderen Metadaten aus diesem Formular in der {new_blog_prefix}_options Tabelle gespeichert.

Ich bin besonders interessiert für die einfachste, geradlinigste und/oder den "richtigen Weg" (d. H. The WordPress Way), um dies zu erreichen, aber ich begnüge mich mit dem Weg, der funktioniert ™!

Bisher habe ich begegnet zahlreichen Sackgassen in meiner Forschung:

  • Einstellungen API - [WP Codex]

    Soweit ich das beurteilen kann, die Einstellungen API (a)kann nicht für den Netzwerkadministratorabschnitt arbeiten (obwohl sich das in einer neueren Version von WP möglicherweise geändert hat); Außerdem scheint (b) nur das Hinzufügen/Ändern von Bildschirmen im Bereich Settings des Dashboards zu ermöglichen.

  • wpmu_options Haken - [Hooks DB]

    scheint für das Hinzufügen von Optionen, um die Netzwerkeinstellungen Bildschirm einen Haken ausschließlich zu sein.

  • add_site_option/add_blog_option - [WP Codex]

    Closest finde ich; scheint das Hinzufügen von sitespezifischen Optionen zur {blogsite_prefix}_options-Tabelle zu erlauben, hilft aber beim Hinzufügen von Optionen zum Admin-Formular immer noch nicht.

Also ... keine Würfel. Jede Hilfe wird geschätzt!

Antwort

27

Wenn Sie sich die Seite source code auf der Seite "Neue Website hinzufügen" ansehen, können Sie sehen, dass WordPress für diesen Zweck keinen Hook bereitstellt. Natürlich wäre es möglich, einen Hook selbst hinzuzufügen, aber es ist in der Regel schlechte Praxis den WordPress-Kern zu bearbeiten.

Sobald jedoch gesendet und alle Informationen vorhanden sind, ruft die Seite die Funktion wpmu_create_blog() auf. In dieser Funktion gibt es einen Haken genannt, nämlich die Aktion wpmu_new_blog:

do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta); 

An diesem Punkt des Blog ist bereits erstellt. Wir können jedoch immer noch feststellen, ob ein Feld übergeben wurde, indem wir diese Aktion anhängen und in der Datenbank speichern. Wir fügen Sie folgendes in unsere Plugin-Datei (oder Vorlage):

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'); 

Wie für das Feld auf der Seite angezeigt wird, können Sie einen JavaScript-Ansatz nutzen könnten.Sie fügen eine Javascript-Datei nur auf der Seite 'Neue Site hinzufügen' hinzu und auf der Seite Laden der Seite fügen Sie das Feld an der richtigen Stelle auf der Seite ein. Sie sollten ein Eingabefeld mit dem Namen 'blog [new_field]' hinzufügen. Wir erstellen die folgende JavaScript-Datei, die, einmal geladen, fügt ein neues Feld der Seite ‚New Site Add‘:

(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); 

Nun ist die einzige Sache ist, diese Datei auf der Seite ‚Add New Site‘ sind noch zu tun , durch diesen zu Ihrer Plugin-Datei hinzufügen:

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

weiterer Vorschlag könnte sein, je nach Bedarf: ein Eingabefeld in der allgemeinen Einstellungen hinzufügen add_settings_field verwenden, so dass ein Benutzer kann es später bearbeiten (und vielleicht nur wenn es die Standardeinstellung für dieses Feld ist). A 'Sie können dieses Feld später nicht ändern'.

Ich hoffe, das ist die Hilfe, die Sie brauchten.

+1

Danke, das ist eine wirklich gute Antwort! Würdig von +100 :) –

+0

Sehr schön, aber eine kleine Änderung: 'if (! Leer ($ _ POST ['blog'] ['neues_feld'])) $ new_field_value = $ _POST ['blog'] ['new_field ']; 'für' if (! isset ($ _ POST [' blog '] [' neues_feld '])) zurückgeben FALSE; '... Betrachte leeren Wert von new_field, der als korrekter Wert akzeptiert werden kann – Mariyo

+1

Seit WP 4.5, Ein Aktionshaken ist innerhalb des Form-Tags von site-new.php namens "network_site_new_form" vorhanden. – Berend

Verwandte Themen