Support » Allgemeine Fragen » Future Posts für angemeldete user

  • simpleXX

    (@simplexx)


    Hi all!
    Ich versuche schon seit einiger Zeit die Posts, die als in nächster Zeit auf meinen Blog erscheinen, sichtbar für angemeldete User zu machen.

    Die Links zu diesen Posts setze ich selber (in der seitbar).

    D.h., ich muss es nur hinbekommen, dass ein angemeldeter User zugriff auf die Beiträge hat. Nicht angemeldete User möchte ich auch die Registrierungseite weiterleiten.

    Mein code sieht folgendermaßen aus

    add_filter('the_posts', 'show_future_posts');
        function show_future_posts($posts)
        {
           global $wp_query, $wpdb;
           if(is_single() && $wp_query->post_count == 0)
           {
               if(is_user_logged_in())
               {
                    $posts = $wpdb->get_results($wp_query->request);
                    return $posts;
               }
               else
               {
                    wp_redirect('http://domain.com/wp-login.php?action=register');
                    exit();
               }
           }
        }

    Es tauchen allerdings Fehler auf die ich nicht verstehe. Wenn ich die index.php seite aufrufe, bekomme ich den Fehler „not found“,
    obwohl ich im code sage
    if(is_single() && $wp_query->post_count == 0)

    D.h. das mein script eigentlich nur greifen sollte wenn es sich im eine single page handelt?

    Warum dann der „not found“ Fehler auf der indexseite?
    Hat jemand eine Idee woran das liegen kann?
    Freue mich über jeden Tipp 🙂

Ansicht von 14 Antworten - 1 bis 14 (von insgesamt 14)
  • Moderator Frank Neumann-Staude

    (@fstaude)

    Hallo,

    mit welchem Theme probierst du das denn? Ich hatte mal das Problem, das ein Anwender ein Theme hatte, das alles mögliche per Ajax nachgeladen hat – dann greift unter umständen nicht mehr is_single und co, dafür ist is_admin dann true, weil Ajaxzugriffe über /wp-admin/ reinkommen.

    Gruß
    Frank

    Thread-Starter simpleXX

    (@simplexx)

    Hi Frank,
    „twentyTen“ … daran kann es nicht liegen :/

    Moderator Frank Neumann-Staude

    (@fstaude)

    Schau ich mir im laufe des Tages mal an.

    Frank

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Ich wüsste nicht, warum mit diesem Code future posts angezeigt werden sollten… Woher stammt der Code und was soll er exakt bewirken?

    „Not found“ ist die normale Reaktion auf Posts in der Zukunft, sie sind ja noch nicht veröffentlicht und werden somit nicht gefunden.

    Hier eine Lösung zu dem Problem (gefunden nach kurzer Google-Suche):
    http://blog.brianjohnsondesign.com/display-future-posts-easily-with-query_posts-wordpress/

    Gruß, Torsten

    Moderator Frank Neumann-Staude

    (@fstaude)

    Hallo,

    ist das wirklich der ganze Code?
    Dann müsste dir doch aufgefallen sein das sogar im Backend in der Liste der Beiträge keine Beiträge mehr auftauchen.

    Das Konzept der Filter ist das alle registrierten Filter als Kette durchlaufen werden. Sprich, wenn dein Filter nichts macht, muss er das unmanipulierte $posts zurückliefern, da das der Input des nöchsten Filters ist.

    Du brauchst als als letztes in deiner Funktion auf jedenfall ein return $posts;

    Ansonsten ist mir nicht klar wie der Konstrukt Futureposts liefern soll.

    Gruß
    Frank

    Thread-Starter simpleXX

    (@simplexx)

    @torsten
    Das PlugIn habe ich schon getestet. Das Problem ist, dass dann auch auf der indexseite oder bei den cats die posts angezeigt werden.

    @frank
    Ich möchte eigentlich nur eine Sache ändern.

    Ich gebe meinen Usern einen link (via email) zu einem Future-post.
    – ist der User angemeldet -> content ganz normal anzeigen
    – ist der User nicht angemeldet -> auf eine spezielle weiter weiterleiten

    Der Rest soll so bleiben wie es ist. D.h. im Backend soll weiterhin „pending“ stehen, auf der indexseite und bei den cats sollen die future posts nicht angezeigt (auch nicht für angemeldete user).

    Danke für eure schnellen Antworten!

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Das ist kein Plugin, sondern ein Code-Beispiel …

    Gruß, Torsten

    Thread-Starter simpleXX

    (@simplexx)

    Das löst doch aber überhaupt nicht mein Problem?
    Les dir bitte mal meinen vorherigen Posts durch.

    Gruß
    simpleXX

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Doch, tut es.

    Gruß, Torsten

    Thread-Starter simpleXX

    (@simplexx)

    Dieser code listet mir alle posts auf, die „future“ sind (was ich allerdings nicht benötige). Klickt man auf einen Posts (und man ist nicht als admin angemeldet) bekommt man die 404 Seite.

    Entweder bin ich echt zu dämlich oder du hast einfach nicht den posts gelesen.

    Ich gebe meinen Usern einen link (via email) zu einem Future-post (den kopiere ich mir aus dem backend).

    klickt der user jetzt auf diesen link, den ich via email verschickt habe …
    – User angemeldet -> content ganz normal anzeigen
    – User nicht angemeldet -> auf eine spezielle weiter weiterleiten

    Der Rest soll so bleiben wie es ist. D.h. im Backend soll weiterhin „pending“ stehen, auf der indexseite und bei den cats sollen die future posts nicht angezeigt (auch nicht für angemeldete user).

    Grüße
    simpleXX

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Der Code zeigt exemplarisch wie man future posts per Query abgreifen kann. Ohne so einen Code werden future posts gar nicht angezeigt, weil sie ja noch nicht veröffentlicht sind.

    Ob jemand angemeldet ist, kannst z.B. mit http://codex.wordpress.org/Function_Reference/is_user_logged_in checken und dann entsprechend deine Ausgabe machen.

    Das war jetzt sicher nicht die Copy-&Paste-Fertiglösung, aber der Kern deiner Frage schien mir die Anzeige selbst zu sein und daher war mein Link eine Lösungmöglichkeit für dein Problem.

    Gruß, Torsten

    Thread-Starter simpleXX

    (@simplexx)

    ich hab irgendwie das Gefühl dass du einfach nicht meine Beiträge liest. anyway … hier der code (in die function.php einfügen)

    add_filter('the_posts', 'show_future_posts');
        function show_future_posts($posts)
        {
           if(is_single() && $wp_query->post_count == 0)
           {
                global $wp_query, $wpdb;
               if(is_user_logged_in())
               {
                    $posts = $wpdb->get_results($wp_query->request);
                    return $posts;
               }
               else
               {
                    wp_redirect('http://domain.com/wp-login.php?action=register');
                    exit();
               }
           }
           return $posts;
        }

    Grüße
    simpleXX

    Thread-Starter simpleXX

    (@simplexx)

    Update:

    add_filter('the_posts', 'show_future_posts');
        function show_future_posts($posts)
        {
           if(is_single())
           {
                global $wp_query, $wpdb;
                $posts_future = $wpdb->get_results($wp_query->request);
    
                if($posts_future[0]->post_status == 'future')
                {
                    if(is_user_logged_in())
                    {
                        return $posts_future;
                    }
                    else
                    {
                        wp_redirect('http://domain.com/bitte-anmelden');
                        exit();
                    }
                }
                else
                {
                     return $posts;
                }
           }
           else
           {
                return $posts;
           }
        }
    Moderator Torsten Landsiedel

    (@zodiac1978)

    ich hab irgendwie das Gefühl dass du einfach nicht meine Beiträge liest

    Warum?

    Die letzte von dir gepostete Lösung ist doch genau das, was ich geschrieben habe: query auf future_posts (aus dem ersten Link von mir) kombiniert mit is_user_logged_in als Conditional Tag …

    Schöne Lösung übrigens und danke, dass Du sie hier nochmal für alle postest!

    Gruß, Torsten

Ansicht von 14 Antworten - 1 bis 14 (von insgesamt 14)
  • Das Thema „Future Posts für angemeldete user“ ist für neue Antworten geschlossen.