web-dev-qa-db-ja.com

特定のユーザーロールメンバーまたはカスタムユーザーロールメンバーのプロファイルページを作成する方法

自分の役割がカスタム役割の場合は、すべてのユーザーのプロフィールページを作成しようとしています。

私は自分のサイトにカスタムロールを作成しました。これが、メンバーがサイトに登録したときにメンバーに割り当てられるデフォルトの役割です。

contributors.phpauthors.phpがあります。私がwww.mysite.com/authorsitに行くと、役割を考慮せずにすべてのユーザーをリストします。それから私はこのURLを書き直すためにAuthor Base using generate_rewrite_rulesを使いました。

今私がwww.mysite.com/mycustomroleに行けばそれはすべてのユーザーをリストします。それは私にとって大丈夫です。

各メンバーのプロフィールページを作成する次のステップ。だから私はauthor.phpを作成しました

以下のユーザーがいると

  • user1 - 管理者
  • user2 - カスタムロール
  • user3 - 管理者
  • user4 - カスタムロール

私はこのようなプロフィールページを見ることができます。

  • 私がwww.mysite.com/authors/user1に行けばそれは彼のプロフィールを示しています。
  • 私がwww.mysite.com/authors/user2に行っても、彼のプロフィールは表示されません。
  • 私がwww.mysite.com/authors/user3に行けばそれは彼のプロフィールを示しています。
  • 私がwww.mysite.com/authors/user4に行っても、彼のプロフィールは表示されません。

そのため、custom created roleユーザーではなく、administratorロールユーザー専用の個人プロファイルページを取得しています。何故ですか。

今のところ私の要件は次のとおりです。

    1. 私は次のように個々のカスタムユーザーのURLを取得したいです。www.mysite.com/customrole/user1
    1. そのURLの下でのみカスタムロールのユーザーを表示したいです。しかし、そのURLの下に他のロールユーザーを表示することができればそれでも問題ありません。

どのように私はどのようなプラグインを使用してこれを行うことができますか?

1
Riffaz Starr

あなたはあなたがカスタム投稿タイプを使っていることに気付きました。

それが問題であるかどうかを確認するには、

  1. 各ユーザーに対して通常の「投稿」を作成します(カスタム投稿タイプではありません)。
  2. 彼らのページが突然表示されるかどうかを確認してください。

もしそうなら、おそらくあなたの投稿者ページはshow custom postsを表示するように設定されていません。

これを修正するには、funtions.phpファイルで次のようなものを使用するか、または作成者ページのクエリを変更します。

function my_show_special_posts_on_author( WP_Query $query ) {
    # Make sure you are only altering the query on the author page
    if ( $query->is_author() && $query->is_main_query() && !is_admin() ) {
        # Grab the current post types to be shown
        $types_to_show = $query->get('post_type');
        $types_to_add = array( 'custom_post_type_1', 'custom_post_type_2' );
        if ( is_array($types_to_show) ) {
            # Already showing an array of types, add yours if not already included
            foreach ( $types_to_add as $post_type ) {
               if ( !in_array($post_type, $types_to_show) ) {
                  $types_to_show[] = $post_type;
               }
            }
        } else if ( empty($types_to_show) ) {
            # Strange. Not showing any types. Add yours anywise.
            $types_to_show = $types_to_add;
        } else {
            # A single one as a string, add it to your types to add then overwrite types to show
            $types_to_add[] = $types_to_show;
            $types_to_show = $types_to_add;
        }
        $query->set('post_type', $types_to_show);
    }
}
add_action('pre_get_posts', 'my_show_special_posts_on_author');

必ず$types_to_add = array( ... );の行を調整してください

カスタム投稿タイプを強制的に表示させる必要があります。

1
Privateer