为什么要取消注册这些设置?

时间:2015-04-30 作者:Ciprian

在将WordPress站点更新到版本4.2(以及强制的4.2.1安全更新)之后,我发现了一些奇怪的错误:

功能:未注册的设置

这个post-type-menu-page 设置未注册。不推荐使用未注册的设置。看见https://codex.wordpress.org/Settings_API 版本2.7中已弃用。

对于许多其他帖子类型,我也有同样的错误:post-type-dashboard-page, post-type-menu-post, post-type-menu-forum (来自bbPress),post-type-dashboard-post 还有更多。

日志弃用调用插件报告了这些错误。没有显示任何行或文件。

为什么会出现这些错误?

我不关心本地WordPress的帖子类型,我只想修改我自己的帖子类型,使之与4.2+版本保持一致。

EDIT: 根据期权的结构,我找不到任何关于post-type-post-type-menu- 在WordPress的源代码中。

2 个回复
最合适的回答,由SO网友:Ian Dunn 整理而成

此处的错误消息实际上具有误导性。WP未检查设置是否已注册,例如。,if ( isset( $GLOBALS[\'wp_registered_settings\'][\'foo\'] ) ) -- 它正在检查表单是否已发布到默认选项页(options.php), 而不是定制的(options-general.php?page=foo).

所以,打电话后完全有可能收到此警告register_setting(), 如果你正在做这样的事情:

<form method="post" action="options.php">

您只需删除整个action 属性,因为默认情况下它将发布到当前URL。在这种情况下,它将包括?page=foo 参数,so$unregistered 不会设置。

SO网友:s_ha_dum

考虑到“我只想将我自己的帖子类型修改为4.2以上版本的最新版本”,您需要将设置注册到register_setting()

您看到的警告是在中生成的wp-admin/options.php:

180         if ( $options ) {
181                 foreach ( $options as $option ) {
182                         if ( $unregistered )
183                                 _deprecated_argument( \'options.php\', \'2.7\', sprintf( __( \'The <code>%1$s</code> setting is unregistered. Unregistered settings are deprecated. See https://codex.wordpress.org/Settings_API\' ), $option, $option_page ) );
$unregistered 在同一文件中较早设置:

134 if ( \'update\' == $action ) {
135         if ( \'options\' == $option_page && !isset( $_POST[\'option_page\'] ) ) { // This is for back compat and will eventually be removed.
136                 $unregistered = true;
137                 check_admin_referer( \'update-options\' );
138         } else {
139                 $unregistered = false;
140                 check_admin_referer( $option_page . \'-options\' );
141         }

结束

相关推荐