我正在为themeforest开发一个wordpress主题,以便用于商业用途,并在wordpress仪表板的用户菜单中添加了一个自定义的社交媒体输入字段,单击更新配置文件后会出现错误。前端显示正确,但当我通过单击更新配置文件按钮提交时,它会将我带到下一页,其中显示
您访问的链接已过期。请重试。
当我删除自定义输入字段时,它会起作用。以下是它的屏幕截图
以下是我的代码(在functions.php中包含的extra-user-fields.php文件中编写):
<?php
add_action( \'show_user_profile\', \'_themename_extra_user_profile_fields\' );
add_action( \'edit_user_profile\', \'_themename_extra_user_profile_fields\' );
add_action(\'user_new_form\', \'_themename_extra_user_profile_fields\');
function _themename_extra_user_profile_fields( $user ) { ?>
<h3><?php _e("Extra profile information", "_themename"); ?></h3>
<table class="form-table">
<?php wp_nonce_field( \'_themename_user_extra_fields_verify\' ); ?>
<tr>
<th><label for="facebook"><?php _e("Facebook Profile Link","_themename"); ?></label></th>
<td>
<input type="text" name="facebook" id="facebook" value="<?php echo esc_url( get_the_author_meta( \'facebook\', $user->ID ) ); ?>" class="regular-text"/><br />
<span class="description"><?php _e("Please enter your facebook profile link."); ?></span>
</td>
</tr>
<tr>
<th><label for="twitter"><?php _e("Twitter Profile Link","_themename"); ?></label></th>
<td>
<input type="text" name="twitter" id="twitter" value="<?php echo esc_url( get_the_author_meta( \'twitter\', $user->ID ) ); ?>" class="regular-text"/><br />
<span class="description"><?php _e("Please enter your twitter profile link."); ?></span>
</td>
</tr>
</table>
<?php }
function _themename_save_extra_user_profile_fields( $user_id ) {
if ( !current_user_can( \'edit_user\', $user_id ) ) {
wp_die( __( \'You are not allowed to be on this page.\', \'_themename\' ) );
}
check_admin_referer( \'_themename_user_extra_fields_verify\' );
$escaped_facebook_url = esc_url($_POST[\'facebook\']);
$escaped_twitter_url = esc_url($_POST[\'twitter\']);
update_user_meta( $user_id, \'facebook\', $escaped_facebook_url);
update_user_meta( $user_id, \'twitter\', $escaped_twitter_url);
}
add_action( \'personal_options_update\', \'_themename_save_extra_user_profile_fields\' );
add_action( \'edit_user_profile_update\', \'_themename_save_extra_user_profile_fields\' );
add_action(\'user_register\', \'_themename_save_extra_user_profile_fields\');
?>
只有在完全删除\\u themename\\u save\\u extra\\u user\\u profile\\u fields()函数及其add\\u操作并完全清空\\u themename\\u extra\\u user\\u profile\\u fields()函数时,才会删除此错误。
此外,我在网上进行了研究,为了修复这个错误,我需要增加通过htaccess文件等上传WordPress的限制大小。But as i said i am making a theme for themeforest so it will be for commercial use and i can\'t just fix this error here and then ask users of my theme to do the same to change the limit size of uploading etc. 所以那个修正对我不起作用
最合适的回答,由SO网友:Rup 整理而成
该错误消息表示管理nonce验证失败(check\\u admin\\u referer,它调用wp\\u nonce\\u ays)。实际上,这里不需要额外的nonce:这些是要添加到现有表单中的额外字段,这些表单已经有了自己的nonce,而您添加的字段只是与它们冲突。(如果您要添加新表单,您需要这些,是的。)
所以我认为解决方法是删除
<?php wp_nonce_field( \'_themename_user_extra_fields_verify\' ); ?>
以及
check_admin_referer( \'_themename_user_extra_fields_verify\' );
表格仍然是安全的。我认为您也不需要用户编辑权限检查。
综上所述,您可以将Facebook和Twitter作为额外的联系人信息字段:
function wpse_376873_add_contactmethods( $contactmethods ) {
$contactmethods[\'facebook\'] = __( "Facebook Profile Link", "_themename" );
$contactmethods[\'twitter\'] = __( "Twitter Profile Link","_themename" );
return $contactmethods;
}
add_filter( \'user_contactmethods\', \'wpse_376873_add_contactmethods\', 10, 1 );
而且大多数操作应该是自动进行的,而不必为字段编写HTML。我认为您不能像为自己的字段设置的那样设置额外的字段描述。