Bri*_*acy 16 wordpress wordpress-plugin
在我自定义的WordPress多站点安装中,我需要在条目表单中添加一个简单的文本字段,用于创建新的博客站点,该站点位于
Network Admin > Sites > Add New
当然,我需要将此字段与表格中的其他元数据一起保存{new_blog_prefix}_options.
我对最简单,最直接和/或"正确的方式"(即WordPress方式)特别感兴趣,但我会满足于The Way That Works™!
到目前为止,我在研究中遇到了无数的死胡同:
设置API - [ WP Codex ]
据我所知,Settings API (a) 可能不适用于网络管理员部分(虽然这可能在最新版本的WP中有所改变); 此外,(b)似乎只允许您Settings在仪表板的部分添加/修改屏幕.
wpmu_options hook - [ Hooks DB ]
似乎是专门用于向"网络设置"屏幕添加选项的挂钩.
add_site_option/add_blog_option - [ WP Codex ]
我能找到最近的; 似乎允许向{blogsite_prefix}_options表中添加特定于站点的选项,但仍然无法向Admin表单添加选项.
所以......没有骰子.任何帮助表示赞赏!
den*_*isg 28
如果查看"添加新站点"页面的源代码,可以看到WordPress没有为此提供钩子.当然,可以自己添加一个钩子,但编辑WordPress核心通常是不好的做法.
但是,一旦提交并且所有信息都存在,该页面将调用函数wpmu_create_blog().在这个函数中有一个叫做的钩子,即动作wpmu_new_blog:
do_action( 'wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta );
Run Code Online (Sandbox Code Playgroud)
此时博客已经创建.但是,我们仍然可以通过挂钩此操作并将其保存到数据库中来检测是否已提交字段.我们将以下内容添加到我们的插件文件(或模板)中:
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' );
Run Code Online (Sandbox Code Playgroud)
至于在页面上显示字段,您可以使用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);
Run Code Online (Sandbox Code Playgroud)
现在唯一要做的就是将此文件包含在"添加新网站"页面中,方法是将其添加到您的插件文件中:
// 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');
}
Run Code Online (Sandbox Code Playgroud)
进一步的建议可能是,根据您的需要:使用add_settings_field在常规设置页面中添加输入字段,以便用户以后可以编辑它(并且可能仅在它是此字段的默认设置时).一个'你以后不能改变这个领域'的方法.
我希望这是你需要的帮助.
| 归档时间: |
|
| 查看次数: |
10678 次 |
| 最近记录: |