如何显示带有2个附加字段的公共用户配置文件?(包括GitHub源代码)

时间:2014-05-15 作者:Alexander Farber

作为WordPress的新手,我正在尝试创建一个插件,它将强制用户指定他们的citygender 注册时,然后为每个显示此信息的用户显示个人配置文件页面。

我已在GitHub中签入我的插件:wp-city-gender.php.

对于注册部分,我遵循了Customizing the Registration Form 博士,它似乎工作得很好-额外的citygender 字段显示在注册表中,稍后存储在wp_usermeta 桌子也可以在Users 仪表板的一部分:

Users screenshot

此外,我将评论者链接重定向到/user/user_id 使用此代码:

define(\'PROFILE\', \'<a href="/user/%d" rel="external nofollow" class="url">%s</a>\');

function get_comment_author_link($cid) {
    global $comment;
    return sprintf(PROFILE, $comment->user_id, $comment->comment_author);
}

add_action(\'get_comment_author_link\',  \'get_comment_author_link\');
screenshot

My question is: 如何为每个用户添加个人资料页面,显示其姓名和2个附加字段?

What I don\'t want: 我不能仅仅创建一个简单的PHP脚本从wp_usermeta 对于某个数字user_id - 因为它不会集成在我的WordPress网站中,也就是说,它不会在顶部显示徽标,在底部显示页脚。

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

我认为一个简单的方法是使用wordpress模板结构,看看Codex: TemplatesCodex: Template Hierarchy 有关一般概述。但也就是说,你可以使用作者模板-Codex: Author Templates - 为此,您很可能会调整author.php 归档以满足您的需要。

此外,您还需要更改作者模板的重写结构,以符合您的目标。有关一般信息,请访问Codex: Rewrite APICodex: Class Reference/WP_Rewrite. 此外,WPSE上已经多次回答了这一问题,无需重复,因此请查看:Diplay a registered user profile page 和/或How to custom change author base without $this->front?.

SO网友:Miguel Garrido

不久前,我尝试使用wordpress创建自定义表单注册。我想注册几个自定义字段并使它们成为必需的,所以我试图找到正确的插件,而不是重新设计轮子。

我找到了一个名为theme my login的好插件:http://wordpress.org/plugins/theme-my-login/

要做到这一点,您需要阅读一些内容,但幸运的是,我们网站上有一些文档可以帮助您:

请参见此处如何添加额外注册字段:http://www.jfarthing.com/development/theme-my-login/adding-extra-registration-fields/

基本上,您需要:

1) 安装插件

2) 添加register-form.php 进入主题布局。

3) 修改您的register-form.php 对于类似的内容:

<div class="login" id="theme-my-login<?php $template->the_instance(); ?>">

<?php $template->the_action_template_message( \'register\' ); ?>
<?php $template->the_errors();  

?>
<form name="registerform" id="registerform<?php $template->the_instance(); ?>" action="<?php $template->the_action_url( \'register\' ); ?>" method="post" autocomplete = "off">

    <input type="text" name="user_login" id="user_login<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( \'user_login\' ); ?>" size="20" />
    <input type="text" name="user_email" id="user_email<?php $template->the_instance(); ?>" class="input" value="<?php $template->the_posted_value( \'user_email\' ); ?>" size="20" />
    <input type="text" placeholder="Gender" name="user_gender" id="user_gender<?php $template->the_instance(); ?>" value="<?php $template->the_posted_value( \'user_gender\' ); ?>" required />
    <input type="text" placeholder="City" type="text" id="user_city<?php $template->the_instance(); ?>" name="user_city" value="<?php $template->the_posted_value( \'user_city\' ); ?>"/>


    <?php do_action( \'register_form\' ); ?>

    <p class="submit">
        <input type="submit" name="wp-submit" class="yellow btn1 uppercase right os700" id="wp-submit<?php $template->the_instance(); ?>" value="<?php esc_attr_e( \'[ Submit ]\' ); ?>" />
        <input type="hidden" name="redirect_to" value="<?php $template->the_redirect_url( \'register\' ); ?>" />
        <input type="hidden" name="instance" value="<?php $template->the_instance(); ?>" />
        <input type="hidden" name="action" value="register" />
    </p>
</form>
<?php $template->the_action_links( array( \'register\' => false ) ); ?>

在这里,您可以根据需要修改和添加自定义字段以及任意多的HTML和CSS。

然后在你的functions.php 你需要注册几个动作,所以我们开始吧。

要注册用户,请执行以下操作:

function tml_user_register( $user_id ) {
    if ( !empty( $_POST[\'user_login\'] ) )
        update_user_meta( $user_id, \'user_login\', $_POST[\'user_login\'] );
    if ( !empty( $_POST[\'user_email\'] ) )
    update_user_meta( $user_id, \'user_email\', $_POST[\'user_email\'] );
    if ( !empty( $_POST[\'user_gender\'] ) )
        update_user_meta( $user_id, \'user_gender\', $_POST[\'user_gender\'] );
    if ( !empty( $_POST[\'user_city\'] ) )
        update_user_meta( $user_id, \'user_city\', $_POST[\'user_city\'] );

    }

add_action( \'user_register\', \'tml_user_register\' );`
要在仪表板上显示内容,请执行以下操作:

add_action ( \'show_user_profile\', \'my_show_extra_profile_fields\' );
add_action ( \'edit_user_profile\', \'my_show_extra_profile_fields\' );
通过这两个操作,您可以在仪表板上显示您的用户配置文件,因此可以将其添加到功能中。php也是如此。

    <?php function my_show_extra_profile_fields ( $user ){ ?>
    <h3>Custom profile information</h3>
    <table class="form-table">
        <tr>
            <th><label for="user_gender"><?php _e(\'Gender\');?></label></th> 
            <td><input type="text" name="user_gender" id="user_gender" value="<?php echo esc_attr( get_the_author_meta( \'user_gender\', $user->ID ) ); ?>" /><br /></td>
        </tr>
        <tr>
            <th><label for="user_city"><?php _e(\'City\');?></label></th>
            <td><input type="text" name="user_city" id="user_city" value="<?php echo esc_attr( get_the_author_meta( \'user_city\', $user->ID ) ); ?>" /><br /></td>
        </tr>
    </table>

<?php }
如果您想让用户更新自己的信息,请添加类似的内容(也在functions.php中):

add_action ( \'personal_options_update\', \'my_save_extra_profile_fields\' );
add_action ( \'edit_user_profile_update\', \'my_save_extra_profile_fields\' );

function my_save_extra_profile_fields( $user_id ){
    if ( !current_user_can( \'edit_user\', $user_id ) )
        return false;
    update_usermeta( $user_id, \'user_gender\', esc_attr(trim($_POST[\'user_gender\'])) );
    update_usermeta( $user_id, \'user_city\', esc_attr(trim($_POST[\'user_city\'])) );

}
是相当多的,但有用的一试,阅读文档并祝你好运,希望这对你有所帮助。

EDITED

好的,如果您想显示用户元,可以使用author.php 以及profile-form.php 位于templates 文件夹,以及register-form.php 其他文件您可以将此文件复制到主题文件夹并自定义。

在上显示自定义元author.php 添加以下短代码:

echo do_shortcode(\'[theme-my-login default_action="profile" show_title="1"]\');
然后,您可以使用以下方式显示内容:

echo $profileuser->user_city
echo $profileuser->user_gender

SO网友:aj-adl

您对WordPress用户系统的一些假设是不正确的。

author_linkcomment_author_link 返回人员在中提供的值website 在他们的用户配置文件上留下评论或评论时的字段(如果他们已注册)。这些字段也可能为空,但如果设置,则实际上始终指向外部站点。

它不以任何方式链接到个人资料页,WordPress默认不做个人资料页,因此人们围绕这个想法创建了很多插件(从简单的个人资料页一直到buddy press)。

著者php是作者帖子和用户的存档!==著者

如果你想在个人资料上拥有公共用户个人资料页面和自定义字段,我强烈建议你使用众多插件中的一个,这些插件已经设计好了——设置它并不是一个简单的功能或“快速”修复,你不能指望有人为你花费50多个互联网点数来完成那么多工作。

结束