如何向新的博客设置表单添加自定义博客选项?

时间:2012-04-25 作者:Brian Lacy

这似乎是一个足够简单的要求,但我正在努力:

  1. I want to add an option field to the "Add New Site".
    一个简单的文本选项就可以了。我该怎么做?

  2. I need to save this custom blog option when the site is created.

    我知道我可以使用“wpmu\\u new\\u blog”挂钩,它通过$meta 变量,但我想知道是否有一种方法可以在一个步骤中完成这一切,这样我就不必执行另一个DB查询,或者更糟糕的是,覆盖/替换整个站点创建过程?

Notes:

我正在使用WP 3.3.1和多站点设置。我正在编写一个插件,列出与指定自定义字段值匹配的所有站点(我们称之为“type”)。

此外,我是一名经验丰富的PHP开发人员,但我对WordPress黑客技术还比较陌生,所以请假设我还不熟悉所有的WP函数和挂钩。

3 个回复
最合适的回答,由SO网友:brasofilo 整理而成

结合两个答案(*),我做了一个插件,在注册新站点(前端和后端)时添加一个自定义元选项,并在站点屏幕的一列中显示其值。

Multisite Categories

enter image description hereenter image description here...

(*)代码参考

1-WordPress + Multisite: How to add custom blog options to Add New Site form in Network Admin?, 作者:dennisg

2-Multisite: How to add Custom Blog Options to new blog setup form?, 由@tbuteler提供

这个add_action(\'wpmu_new_blog\', \'add_new_blog_field\'); 从两个答案中合并。

我已经在我的multisite中使用了ID列代码,并且还在插件中添加了Category列。

[update]

试图使类别列可排序,但似乎几乎无法解决。。。

查看此问题/答案:Filters 'request' and 'parse_query' not firing in sites.php nor link-manager.php

[update 2]

我已经修改了插件,现在类别可以排序了。插件的第一个版本现在是一个要点(链接在开始时更新),并且new version 留在GitHub。

SO网友:Tomas Buteler

多站点注册过程不是一件容易调整的事情。与其他流程不同,它确实有许多挂钩可供使用,但它们似乎结合得不太好,无法进行大量定制,因此我理解您的沮丧。

如果我理解正确的话,实现你想要的并不复杂,尽管如果不覆盖WordPress的许多默认行为,这不可能是一个一步解决方案,主要是因为注册(即用户提交自定义信息的时间)和激活(即新博客实际创建的时间)是分开进行的。

这里是一个非常粗略的代码,你需要开始。希望它能引导您朝着正确的方向前进:

// 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\']);
}
请记住:

如果您想通过插件过滤输入,我强烈建议使用选择输入锁定提供的选项最后一点,如果您想稍后处理所有现有博客中的所有“extra\\u field”值,我强烈建议将信息存储在一个表中;可能使用update_site_option 而不是update_blog_option 在最后一个函数上,丢失blog\\u id,在这种情况下不需要该id。

无论如何,让我们知道进展如何,祝你好运!

SO网友:george.n

如果你看新网站。php代码,您应该已经得到了答案-这是没有的!

没有条件检查是否可以向表单中添加任何内容。然而,我研究了该文件,认为您必须手动将此输入字段添加到新站点中。php并将数组中的值作为meta传递给wpmu\\u create\\u blog函数,您可以在第77行附近找到该函数。未测试,但正在阅读函数的功能,这可能是您正在寻找的。

结束

相关推荐

Single install or multisite?

我在努力满足这个客户的要求时遇到了一点僵局。长话短说,他们希望有一个特定用户可以访问和修改的整体网站,再加上一个外观和感觉完全不同的博客。他们当前的网站刚刚重新设计,我将主要移植到WordPress。他们还有一个WordPress博客,位于/博客上,运行一个基于Kubrick主题的过时WP-他们希望保留该主题/样式。以下是问题:他们希望从一个后端管理所有内容,他们希望具有不同外观和感觉的博客驻留在/博客上,以获取已经存在的链接(多站点不允许这样做)</博客页面应该是一致的-类别、单个帖子、档案等搜索