在WordPress管理仪表板中添加自定义用户输入字段会给出错误,您所关注的链接已过期。请再试一次

时间:2020-10-20 作者:Muhammad Kashif

我正在为themeforest开发一个wordpress主题,以便用于商业用途,并在wordpress仪表板的用户菜单中添加了一个自定义的社交媒体输入字段,单击更新配置文件后会出现错误。前端显示正确,但当我通过单击更新配置文件按钮提交时,它会将我带到下一页,其中显示

您访问的链接已过期。请重试。

当我删除自定义输入字段时,它会起作用。以下是它的屏幕截图

Wordpress Dashboard user menu with custom fields of social

Error Thrown when i submit the user profile with my custom fields

以下是我的代码(在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. 所以那个修正对我不起作用

1 个回复
最合适的回答,由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。我认为您不能像为自己的字段设置的那样设置额外的字段描述。

相关推荐

如何在Pluggable.php中使用我的插件文件中的函数

我正在创建一个插件,需要使用get\\u user\\u by()和wp\\u check\\u password()以及wordpress pluggable中提供的一些很酷的函数。但是它总是抛出一个未定义的函数错误。但是如果我像这样直接在插件文件中包含该文件include (ABSPATH . \'wp_includes/pluggable.php\') 我将能够在我的插件中使用这些函数,但我读到直接包含这些文件并不好,所以我想知道最好的方法来避免冲突。我也尝试过创建这样的函数add_act