在我正在自定义的WordPress Multisite安装中,我需要在条目表单中添加一个简单的文本字段,以便创建新的博客站点,该站点位于
Network Admin > Sites > Add New
当然,我需要将此字段与该表单中的其他元数据一起保存在{new_blog_prefix}_options
表中。
我对最简单,最直接和/或“正确的方式”(即WordPress方式)特别感兴趣,但我会满足于The Way That Works™!
到目前为止,我在研究中遇到了许多死胡同:
设置API - [WP Codex]
据我所知,设置API (a) 可能不适用于网络管理员部分(虽然这可能在最新版本的WP中有所改变);此外,(b)似乎只允许您在信息中心的Settings
部分添加/修改屏幕。
wpmu_options hook - [Hooks DB]
似乎是专门用于在“网络设置”屏幕中添加选项的挂钩。
add_site_option / add_blog_option - [WP Codex]
最近我能找到;似乎允许向{blogsite_prefix}_options
表添加特定于站点的选项,但仍然无法向管理表单添加选项。
所以......没有骰子。任何帮助表示赞赏!
答案 0 :(得分:27)
如果您查看“添加新网站”页面的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在常规设置页面中添加输入字段,以便用户以后可以对其进行编辑(也许只有在此字段的默认设置下才能编辑它)。 “你以后不能改变这个字段”的方法。
我希望这是你需要的帮助。