web-dev-qa-db-ja.com

最近の投稿ページにログインしているユーザーにのみ関連する投稿を読み込む

Wordpressのキャプテン各位

私は問題に遭遇し、私は援助を求めています。

私が作成しようとしているのは、ログインしているユーザーが自分のユーザー名に関連付けられている投稿のみを見ることができるカスタマーポータルです。これが最近の投稿ページ(またはインデックス。ユーザーがログインしたときに最初に表示されるページ、最近の投稿すべて)で機能することができれば素晴らしいでしょう。連絡先ページ以外に静的ページはありません(これが重要な場合)。

それは非常に簡単な修正のように思えますが、私は私が見つけたすべてのプラグインを試してみました。たとえば、 'User Specific Content'で試したプラグインの1つですが、これは、実際の投稿を開くために投稿をクリックした場合にのみコンテンツがブロックされるため、探しているものとは異なります。私が探しているのは、メインページにログインユーザーのアクセス可能な投稿のみを既に表示する方法です。

作成者は1人だけです。管理者で、個々の投稿が個々のユーザー名に割り当てられていることだけを確認することを目的とした多数のユーザー(顧客、購読者として設定)があります。これを行う最も簡単な方法は何ですか?おそらく、私はユーザーのカテゴリーにある投稿のみを照会できますか? (私は顧客にちなんで名付けられたカテゴリに各投稿を投稿しました)。これが私の問題と私が達成しようとしていることを明確にしてくれることを願っています。

それが十分に明確でないならばより多くの情報を求めることを躊躇しないでください!

前もって感謝します!

4
Alex Broere

現在ログインしているユーザーIDを取得してから、pre_get_postsを使用して、その特定のユーザーからの投稿のみを表示するようにホーム/ブログページのメインクエリを変更することができます。私が理解しているように、あなたは作家について特に話しています。

簡単な購読者は投稿を作成できないため、ブログやホームページに投稿が表示されないだけでなく、ユーザーの機能も確認することをお勧めします。

非常に単純なpre_get_postsアクションは、次のようになります。(注:以下はテストされていません

add_action( 'pre_get_posts', function ( $q )
{    
    if ( is_user_logged_in() ) { // First check if we have a logged in user before doing anything
        if (    $q->is_home() // Only targets the main page, home page
             && $q->is_main_query() // Only targets the main query
        ) {
            // Get the current logged in user
            $current_logged_in_user = wp_get_current_user();

            // Set the logged in user ID as value to the author parameter
            $q->set( 'author', $current_logged_in_user->ID );
        }
    }    
});

編集

コメントから、各ユーザーは同じ名前のカテゴリを持っているようで、この特定のカテゴリは投稿に添付されています。

これに対応するには、次のことをする必要があります。

  • 上記のように、現在ログインしているユーザーを取得します

  • あなたはそれからカテゴリーにマッチする現在のユーザーからの情報を使う必要があるでしょう。たとえば、'display_name' == 'category name'の場合、ユーザー表示名がJane Doeの場合、その名前に割り当てられているカテゴリ名もJane Doeとなります。

  • 上記の例では、カテゴリIDを取得できるように、カテゴリを名前で取得する必要があります。 categoryやカスタム分類法のようなビルトイン分類法で使用できるget_term_by()を使用します。

  • それから先に進み、元の答えと同じことをします。

あなたはこのようなことをすることができます。 (コードをコメントアウトしたので、理解して従うことができます

add_action( 'pre_get_posts', function ( $q )
{    
    if ( is_user_logged_in() ) { // First check if we have a logged in user before doing anything
        if (    $q->is_home() // Only targets the main page, home page
             && $q->is_main_query() // Only targets the main query
        ) {
            // Get the current logged in user
            $current_logged_in_user = wp_get_current_user();
            /**
             * We will now get the term/category object from the user display_name
             * You will need to make sure if this corresponds with your term/category
             * If not, use the correct info to match
             */
            $term = get_term_by( 
                'name', // We will get our term by name as term name == user display_name. Change as needed
                $current_logged_in_user->display_name, // Our value to look for will be user display_name
                'category' // The taxonomy the term belongs to. category is the build in taxonomy
            );
            if ( $term ) { // Only filter the main query if we actually have a term with the desired name
                $q->set( 'cat', $term->term_id ); // Filter the posts to only show posts from the desired category
            }
        }
    }    
});
5
Pieter Goosen