web-dev-qa-db-fra.com

Chargement des publications associées uniquement à l'utilisateur connecté sur la page des publications récentes

Chers Capitaines Wordpress,

Je suis tombé sur un problème et je cherche de l'aide.

Ce que j'essaie de créer, c'est un portail client où l'utilisateur connecté ne verra que les publications associées à son nom d'utilisateur. Ce serait génial si cela pouvait fonctionner sur la page des publications récentes (ou index .. La page qu'un utilisateur peut voir en premier lorsqu'il se connecte, avec toutes les publications récentes). Je n'ai pas de pages statiques, à part une page de contact (au cas où cela serait important).

Cela semble être une solution très simple, mais j’ai essayé tous les plugins que j’ai réussi à trouver. Par exemple, l'un des plugins que j'ai essayés dans 'Contenu spécifique à l'utilisateur' - mais ce n'est pas exactement ce que je recherche, car il bloque le contenu uniquement lorsque l'utilisateur clique dessus (pour ouvrir le message réel). Ce que je recherche, c’est un moyen de ne montrer que les messages accessibles pour l’utilisateur connecté sur la page principale.

Il n'y a qu'un seul auteur - l'administrateur, et de nombreux utilisateurs (clients, définis comme abonnés) sont censés voir uniquement les publications individuelles attribuées à leur nom d'utilisateur. Quelle est la façon la plus simple de faire cela? Peut-être que je ne pourrais interroger que les publications qui appartiennent à la catégorie de l'utilisateur? (J'ai posté chaque article dans la catégorie nommée d'après le client). J'espère que cela clarifie mon problème et ce que j'essaie de réaliser.

S'il vous plaît n'hésitez pas à demander plus d'informations si ce n'est pas assez clair!

Merci d'avance!

4
Alex Broere

Vous devriez pouvoir obtenir l'ID utilisateur actuellement connecté, puis utiliser pre_get_posts pour modifier la requête principale sur la page d'accueil/blog afin d'afficher uniquement les messages de cet utilisateur spécifique. Si je comprends bien, vous parlez spécifiquement des auteurs.

Vous voudrez peut-être également vérifier les capacités de l'utilisateur, de même que les simples abonnés ne verront aucun message sur le blog/la page d'accueil, car ils ne peuvent pas en créer.

Une action très simple de pre_get_posts ressemblera à quelque chose comme ceci: ( NOTE: Ce qui suit n'est pas testé )

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

MODIFIER

D'après les commentaires, il semble que chaque utilisateur a une catégorie du même nom et cette catégorie spécifique est ensuite attachée à un message.

Pour ce faire, vous devrez procéder comme suit.

  • Comme ci-dessus, récupère l'utilisateur actuellement connecté

  • Vous devrez ensuite utiliser les informations de l'utilisateur actuel qui correspondront à la catégorie. Par exemple et à titre d'exemple, si 'display_name' == 'category name', alors, si le nom d'affichage de l'utilisateur est Jane Doe, le nom de catégorie attribué au nom s'appellera également Jane Doe.

  • Dans l'exemple ci-dessus, nous devons obtenir la catégorie par nom afin de pouvoir obtenir l'ID de la catégorie. Nous utiliserons get_term_by() qui peut être utilisé avec des taxonomies intégrées telles que category ou des taxonomies personnalisées

  • Nous pouvons alors continuer et faire comme dans la réponse originale

Vous pouvez faire quelque chose comme ça; ( J'ai commenté le code pour que vous puissiez le comprendre et le suivre mieux )

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