it-swarm.com.de

Laden von Beiträgen, die nur dem angemeldeten Benutzer auf der Seite mit den letzten Beiträgen zugeordnet sind

Liebe Wordpress-Kapitäne,

Ich bin auf ein Problem gestoßen und suche Unterstützung.

Ich versuche ein Kundenportal zu erstellen, in dem dem angemeldeten Benutzer nur die Beiträge angezeigt werden, die mit seinem Benutzernamen verknüpft sind. Es wäre großartig, wenn dies auf der Seite mit den letzten Beiträgen (oder dem Index) funktionieren könnte. Die Seite, die ein Benutzer zuerst sieht, wenn er sich mit allen letzten Beiträgen anmeldet. Ich habe keine statischen Seiten außer einer Kontaktseite (falls dies wichtig ist).

Es scheint eine sehr einfache Lösung zu sein, aber ich habe jedes einzelne Plugin ausprobiert, das ich gefunden habe. Zum Beispiel eines der Plugins, das ich in "Benutzerspezifischer Inhalt" ausprobiert habe - aber das ist nicht genau das, wonach ich suche, da es den Inhalt nur blockiert, wenn Sie auf den Beitrag klicken (um den tatsächlichen Beitrag zu öffnen). Was ich suche, ist eine Möglichkeit, nur die zugänglichen Beiträge für den angemeldeten Benutzer auf der Hauptseite anzuzeigen.

Es gibt nur einen Autor - den Administrator - und es gibt viele Benutzer (Kunden, die als Abonnenten festgelegt sind), die nur die einzelnen Beiträge sehen sollen, die ihrem jeweiligen Benutzernamen zugeordnet sind. Wie geht das am einfachsten? Vielleicht konnte ich nur die Beiträge abfragen, die in der Kategorie des Benutzers sind? (Ich habe jeden Beitrag in der nach dem Kunden benannten Kategorie veröffentlicht). Ich hoffe, dass dadurch mein Problem geklärt wird und was ich erreichen möchte.

Bitte zögern Sie nicht, weitere Informationen anzufordern, wenn dies nicht klar genug ist!

Danke im Voraus!

4
Alex Broere

Sie sollten in der Lage sein, die aktuell angemeldete Benutzer-ID abzurufen und dann pre_get_posts zu verwenden, um die Hauptabfrage auf der Homepage/Blog-Seite so zu ändern, dass nur Beiträge dieses bestimmten Benutzers angezeigt werden. Soweit ich weiß, sprechen Sie speziell von Autoren.

Möglicherweise möchten Sie auch die Funktionen des Benutzers überprüfen, und einfache Abonnenten sehen keine Beiträge auf dem Blog/der Homepage, da sie keine Beiträge verfassen können.

Eine sehr einfache pre_get_posts Aktion sieht ungefähr so ​​aus: (HINWEIS:Folgendes ist ungetestet)

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

BEARBEITEN

Aus Kommentaren geht hervor, dass jeder Benutzer eine Kategorie mit demselben Namen hat und diese bestimmte Kategorie dann an einen Beitrag angehängt wird

Um dies zu ermöglichen, müssen Sie die folgenden Schritte ausführen

  • Rufen Sie wie oben den aktuell angemeldeten Benutzer ab

  • Sie müssen dann die Informationen des aktuellen Benutzers verwenden, die mit der Kategorie übereinstimmen. Wenn beispielsweise 'display_name' == 'category name' lautet und der Anzeigename des Benutzers Jane Doe lautet, wird der dem Namen zugewiesene Kategoriename auch Jane Doe genannt.

  • Im obigen Beispiel müssen wir die Kategorie nach Namen abrufen, damit wir die Kategorie-ID abrufen können. Wir werden get_term_by() verwenden, das mit eingebauten Taxonomien wie category oder benutzerdefinierten Taxonomien verwendet werden kann

  • Wir können dann genauso vorgehen wie in der ursprünglichen Antwort

Sie können so etwas tun; (Ich habe den Code kommentiert, damit Sie ihn besser verstehen und befolgen können.)

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