如何在用户设置/配置文件“复选框列表”中添加/保存自定义域

时间:2011-01-10 作者:Ayaz Malik

我一直在为我的网站开发一个自定义系统,在该系统中,用户可以拥有一个单独的帐户、设置和配置文件页面,以使我的网站更具交互性和社区类型。还有一些其他的东西。我是新的编码,我已经设法使个人资料页等。

现在,我一直在为用户设置页面添加标签的复选框列表。用户可以选择多个标签作为兴趣。。所以我可以用这些在他的账户页面上随机显示推荐的帖子。

我可以使用以下代码在设置页面中添加两个额外字段(Twitter/facebook):

function add_bkmrks_contactmethod( $bcontactmethods ) {
$bcontactmethods[\'Twitter\'] = \'Twitter\';
$bcontactmethods[\'Facebook\'] = \'Facebook\';
return $bcontactmethods;
}
add_filter(\'user_contactmethods\',\'add_bkmrks_contactmethod\',10,1);
通过使用,也可以在页面上轻松调用tehse$userinfo->Twitter 等等,但我对清单没有任何线索。。。调用数组等。

如果你们遇到任何能帮助我解决这个问题的文章或代码块,我会很感激:)谢谢

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

Justin Tadlock有一个很好的教程可以帮助您入门:

http://justintadlock.com/archives/2009/09/10/adding-and-using-custom-user-profile-fields

但是,有一些处理复选框的细节,如果您想使复选框与标记/类别相对应,还有一些自定义代码。

要生成表单字段并保存数据,请使用以下代码段:

<?php

function user_interests_fields( $user ) {
    // get product categories
    $tags = get_terms(\'post_tag\', array(\'hide_empty\' => false));
    $user_tags = get_the_author_meta( \'user_interests\', $user->ID );
    ?>
    <table class="form-table">
        <tr>
            <th>My interests:</th>
            <td>
        <?php
        if ( count( $tags ) ) {
            foreach( $tags as $tag ) { ?>
            <p><label for="user_interests_<?php echo esc_attr( $tag->slug); ?>">
                <input
                    id="user_interests_<?php echo esc_attr( $tag->slug); ?>"
                    name="user_interests[<?php echo esc_attr( $tag->term_id ); ?>]"
                    type="checkbox"
                    value="<?php echo esc_attr( $tag->term_id ); ?>"
                    <?php if ( in_array( $tag->term_id, $user_tags ) ) echo \' checked="checked"\'; ?> />
                <?php echo esc_html($tag->name); ?>
            </label></p><?php
            }
        } ?>
            </td>
        </tr>
    </table>
    <?php
}
add_action( \'show_user_profile\', \'user_interests_fields\' );
add_action( \'edit_user_profile\', \'user_interests_fields\' );

    // store interests
    function user_interests_fields_save( $user_id ) {
        if ( !current_user_can( \'edit_user\', $user_id ) )
            return false;
        update_user_meta( $user_id, \'user_interests\', $_POST[\'user_interests\'] );
    }
    add_action( \'personal_options_update\', \'user_interests_fields_save\' );
    add_action( \'edit_user_profile_update\', \'user_interests_fields_save\' );

?>
然后您可以调用get_the_author_meta() 函数获取标记ID数组,然后可以在查询中使用这些ID,例如:

query_posts( array( \'tag_id\' => get_the_author_meta( \'user_interests\', $user_id ) ) );

结束

相关推荐