web-dev-qa-db-ja.com

2つの追加フィールドを持つパブリックユーザープロファイルを表示する方法(GitHubのソースコードが含まれています)

WordPressの初心者として、登録中に都市性別をユーザーに指定させるプラグインを作成しようとしています。この情報を表示している各ユーザーの個人用プロフィールページを表示します。

私はGitHubで私のプラグインをチェックインしました: wp-city-gender.php

登録部分については、 登録フォームのカスタマイズ のドキュメントに従ったところ、うまくいきそうです - 追加のおよび性別フィールドは登録フォームに表示され、後で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

私の質問は、次のとおりです。自分の名前と2つの追加フィールドを表示して、各ユーザーの個人プロフィールページを追加する方法を教えてください。

欲しくないもの:wp_usermetaから特定の数値user_idに対してデータを取得する単純なPHPスクリプトを作成することはできません。 私のWordPressウェブサイト に統合されています。つまり、上部にロゴ、下部にフッターは表示されません。

2

これを簡単に行う方法はワードプレスのテンプレート構造を利用することだと思います。 Codex:Templatesを見てください。一般的な概要については、コーデックス:テンプレート階層 。しかし、つまりあなたは作者のテンプレート - Codex:Author Templates - を使うことができるので、あなたのニーズに合うようにauthor.phpファイルを適応させるでしょう。

さらに、あなたはあなたの目標に合うように著者テンプレートのための書き換え構造を変更したいです。一般情報は Codex:Rewrite API および Codex:Class Reference/WP_Rewrite にあります。それに加えて、これはWPSE上で何度も回答されているので、これを複製する必要はないので、見てください: 登録済みのユーザープロフィールページを表示する および/または $ this-> frontを使わずに著者ベースをカスタム変更するにはどうすればいいですか?

2
Nicolai

あなたは間違っているWordPressesユーザーシステムについていくつかの仮定をしています。

author_linkおよびcomment_author_linkは、コメントを残すとき、またはユーザーのプロフィールにサインアップしたときに、ユーザーがwebsiteフィールドに指定した値を返します。これらのフィールドも空の場合がありますが、設定されている場合は実質的に常に外部サイトを指します。

プロファイルページへのリンクは一切行われません。デフォルトではWordPressはプロファイルページを作成しません。したがって、単純なプロファイルページからバディプレスのようなものまで多くのプラグインを作成しているのはなぜでしょう。

Author.phpは作者の投稿のアーカイブであり、ユーザーです!==作者

あなたがパブリックユーザプロファイルページとプロファイル上のカスタムフィールドを持ちたいのなら、私はすでにそれをするために設計された多くのプラグインのうちの1つを使うことを強く勧めます - 誰かがあなたに代わって+50インターネットポイントの仕事をすることを期待してはいけません。

1
aj-adl

私はしばらく前にwordpressを使ってカスタムフォーム登録を作成しようとしました。私はいくつかのカスタムフィールドを登録してそれらを必須にしたかったので、ホイールを作り直す代わりに正しいプラグインを見つけようとしました。

私のログインというテーマという優れたプラグインを見つけました。 http://wordpress.org/plugins/theme-my-login/

これを行うには少し読む必要がありますが、幸いなことに、このWebサイトで役に立つことがある文書があります。

ここで追加の登録フィールドを追加する方法を参照してください。 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にあなたはここに私たちが行くようにあなたは2、3の行動を登録する必要があるでしょう。

ユーザーを登録するには:

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' );

これら2つのアクションであなたのダッシュボードにあなたのユーザープロファイルを表示することができますので、同様にあなたのfunctions.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'])) );

}

かなりたくさんありますが、役に立つこと、ドキュメントを読んで幸運を祈ります、これがあなたのお役に立てばと思っています。

編集

ユーザーメタを表示したいのであれば、author.phpprofile-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
1
Miguel Garrido