2012-04-26 36 views
16

在一個WordPress多站點安裝我定製的,我需要一個簡單的文本字段添加到輸入表單用於創建新的博客網站,這是位於WordPress +多站點:如何在網絡管理員中添加自定義博客選項以添加新站點表單?

Network Admin > Sites > Add New

當然,我需要這個領域獲得與{new_blog_prefix}_options表中的表格中的其他元數據一起保存。

我特別感興趣的是最簡單,最直接,和/或「正確的方式」(即WordPress的方式)來完成這一點,但我會解決的工作方式™!在我的研究

到目前爲止,我已經遇到重重死角:

  • 設置API - [WP Codex]

    據我所知道的,設置API (一)可能不適用於網絡管理部分(儘管這可能已在WP的最新版本中發生了變化);此外,(b)它似乎這隻能讓你添加/修改儀表板的Settings部分的屏幕。

  • wpmu_options鉤 - [Hooks DB]

    似乎是一個鉤專門用於添加選項網絡設置屏幕。

  • add_site_option/add_blog_option - [WP Codex]

    最近,我可以找到;似乎允許向{blogsite_prefix}_options表添加特定於站點的選項,但仍然無法將選項添加到管理員表單。

所以......沒有骰子。任何幫助表示讚賞!

回答

27

如果你看看'Add New Site'頁面的source code,你可以看到WordPress沒有爲此提供鉤子。當然,你可以自己添加一個鉤子,但通常是不好的做法來編輯WordPress核心。

但是,一旦提交併且所有信息都存在,頁面將調用功能wpmu_create_blog()。在這個函數有一個名爲鉤,即動作wpmu_new_blog

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

此時已創建了博客。但是,我們仍然可以通過掛接到此操作並將其保存到數據庫中來檢測是否提交了字段。我們添加下面進入我們的插件文件(或模板):

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

作爲顯示領域到頁面上,你可以使用JavaScript的方法。您只需將一個JavaScript文件添加到「添加新網站」頁面,然後在頁面的onLoad中將該字段插入頁面上的正確位置。您應該添加一個名爲'blog [new_field]'的輸入字段。我們創建,一旦加載以下JavaScript文件,增加了一個新的領域「添加新網站頁面:

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

現在唯一剩下要做的就是包括這個文件到」添加新網站頁面,加入給你的插件文件:

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

進一步的建議可能是,根據您的需要:在使用add_settings_field,常規設置頁面添加一個輸入框,使得用戶可以在以後(也許只是編輯如果這是該字段的默認設置)。 A'以後不能改變這個字段'的方法。

我希望這是您所需要的幫助。

+1

謝謝,這是一個非常好的答案!值得一個+100 :) – 2012-05-09 17:43:46

+0

非常好,但一個小小的變化:'if(!empty($ _ POST ['blog'] ['new_field'])) $ new_field_value = $ _POST ['blog'] ['new_field '];'for'if(!isset($ _ POST ['blog'] ['new_field']))return FALSE;'...考慮new_field的空值,可以接受爲正確的值 – Mariyo 2014-01-22 09:31:15

+1

由於WP 4.5,在site-new.php的窗體標籤內部存在一個動作掛鉤,名爲「network_site_new_form」。 – Berend 2016-10-27 11:08:43

相關問題