SHORTCODE Inhalte nur für bestimmte eingeloggte Benutzer sichtbar machen

  • Hallo,

    ich erkläre einmal kurz mein Problem:

    Ich habe einen Shortcode auf einer Website gefunden, welchen ich noch gern modifizieren möchte (http://www.tipps.1st-tec.de/wordpress/39-w…bar-machen.html). Dieser Shortcode macht Text in Wordpress Artikeln nur für angemeldete User sichtbar. Auf unserer Website, soll es zwei Usergruppen geben, User1 und User2. Diese haben die gleichen Rechte (Subscriber). Jedoch sollen die Inhalte von der Gruppe User1 nicht bestimmte Inhalte auf der Seite von der Usergruppe User2 sehen und umgekehrt.

    Also war meine Idee, in diesen Shortcode eine Art von Benutzerabfrage noch einzubauen, sodass ich am Ende zwei Shortcodes habe. Einen, mit dem ich die Inhalte von Usergruppe User1 verbinden kann - und einen für die Usergruppe User2, wo ich nur die Inhalte für die Usergruppe User2 hineinschreiben kann.

    HTML
    function login_shortcode( $atts, $content = null ) { 
        if (is_user_logged_in()) { 
        return '<span class="is-login">' . $content . '</span>';} 
    } 
    add_shortcode( 'is-login', 'login_shortcode' );

    Also müsste ich dies mit der is_user_logged_in Funktion verbinden und eine Abfrage machen - jedoch weiß ich nicht wirklich wie ich dies konkret umsetzen muss.

    Ich wäre sehr froh, wenn mir jemand helfen könnte

    Gruß

    lukme

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Du kannst es über condition-tags direkt im Template machen, ohne functions.php.

    PHP
    <?php
    $current_user = wp_get_current_user();
    if ( 0 == $current_user->ID ) {
        // Not logged in.
    } else {
        // Logged in.
    }
    ?>


    Und so kannst Du die verschiedenen IDs der User abfragen, mit z. B. elseif.

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

    Einmal editiert, zuletzt von SirEctor (30. Juli 2014 um 11:33)

  • Du kannst es über condition-tags direkt im Template machen, ohne functions.php.

    PHP
    <?php
    $current_user = wp_get_current_user();
    if ( 0 == $current_user->ID ) {
        // Not logged in.
    } else {
        // Logged in.
    }
    ?>


    Und so kannst Du die verschiedenen IDs der User abfragen, mit z. B. elseif.

    Auf der Seite war ich auch schon, wo der Code herkommt -jedoch hilft er mir nicht viel bei der Lösung des Problems weiter.

    Trotzdem Danke

  • Und warum nicht? Vielleicht können wir Dir dann helfen?! Was für ein Problem hast Du damit?

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • Mit welchem Plugin / Tool erstellst / verwaltest Du die User Gruppen? Deine Funktion muss sich der Methoden / Hooks dieses Plugins bedienen. Nicht selten haben die Entwickler daran bereits gedacht und es gibt Möglichkeiten unproblematisch die Gruppenzugehörigkeit zu bestimmen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Hi, ich benutze kein Plugin dafür - die Benutzer haben die Subscriber Rolle und das Admin Dashboard ist für sie deaktiviert. Den User Access Manager ich leider nicht benutzen, da er mit einem anderen wichtigen Plugin nicht zusammen funktioniert.

  • Worin unterscheiden sich den dann Gruppe 1 und Gruppe 2? Woran kann man das festmachen? Gibt es es ein Custom Field für Benutzer, in dem Gruppe 1 oder 2 steht? Das was Du tun willst ist relative einfach und eine solche Abfrage ist nicht schwer. Dazu braucht man aber eine Zuordnung.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Hi, es handelt sich nur um zwei User. Eine ist ein deutscher Händler, welcher die GBP-Preise nicht sehen soll und umgekehrt. Der andere eben Händler aus England, welcher die deutschen Preise nicht sehen soll.

  • Und warum nicht? Vielleicht können wir Dir dann helfen?! Was für ein Problem hast Du damit?


    Welche Fehler bekommst Du?

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • HTML
    function login_shortcode( $atts, $content = null ) {     $user = wp_get_current_user();    if($user && isset($user->user_login) && 'Haendler' == $user->user_login){     return '<span class="is-login">' . $content . '</span>';} } 
    
    
    add_shortcode( 'is-login', 'login_shortcode' );


    Das habe ich jetzt bereits

  • Welche Fehler bekommst Du?

    Ich weiß einfach nicht, wie ich dies auf mein Problem ummünzen kann. Bzw ich habe es versucht, das Beispiel mit dem Shortcode zu verbinden, jedoch konnte jeder User alles sehen.

    Gruß

  • Die IF Abfrage macht ja auch keinen Unterschied zwischen den beiden Benutzern.

    Die Funktion ist ungeprüft und soll nur das Konzept verdeutlichen.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Die IF Abfrage macht ja auch keinen Unterschied zwischen den beiden Benutzern.

    Die Funktion ist ungeprüft und soll nur das Konzept verdeutlichen.

    Hi, schon mal vielen Dank für deine Mühe. Der Code funktioniert soweit und die Userabfrage ebenfalls. Jedoch ist mein Problem etwas umfangreicher - ich versuche es verständlich zu erklären:
    Der "$content" ist immer ein verschiedener auf den Seiten. Es sind mehrere Produkte wo immer zwischen den jeweiligen Währungen unterschieden wird. Dies kann ich nicht alles in die funktions.php reinschreiben, sondern müsste mir dies von der jeweiligen Seite holen, wo es hinterlegt ist. Ich habe eine Art Produktkonfigurator mit Hilfe des Forums auf die Beine gestellt, wo eine Preiskalkulation statt findet.
    Hier ein Codeausschnitt meiner Seite:


    Nach diesem Prinzip wird der Preis berechnet. Nun ist das Problem, wenn ich beide Preisberechnungen auf eine Seite schreibe, buggt das Berechnungsskript, deshalb war mein Ansatz folgender:

    Das Produkt ist auf einer vorherigen Seite mit einem Bild verlinkt - ich hatte nun vor, die Userabfrage hinter das Bild zu legen, dort eine Userabfrage durchzuführen, somit eine Auswahl zu treffen, welche Seite (Euro oder Sfr) aufgerufen wird - entweder die mit den Euro Preisen oder den Schweizer Franken. Wenn ein deutscher Händler also eingeloggt ist, leitet die Userabfrage ihn nun auf die Euro-Seite weiter, einen Schweizer eben auf die Seite mit den Schweizer Franken.

    Das Problem ist ziemlich umfangreich, jedoch denke ich, dass es möglich ist, dies umzusetzen. Google habe ich dazu schon ausgiebig befragt, jedoch keine Lösung gefunden, welche auf mein Problem zutrifft.
    Hoffentlich ist alles verständlich erklärt und ihr könnt mir helfen.

    Gruß

    lukme

  • Einfach eine globale Variable in Abhängigkeit vom User definieren:

    Mit $GLOBALS['my_currency'] kann man nun auf die Währung zugreifen. Wenn die Währung in den Javascripten benötigt wird, geht das via wp_localize_script:

    wp_register_script( 'my_script', 'path/to/myscript.js' );
    $scriptdata = array( 'currency' => $GLOBALS['my_currency'] );
    wp_localize_script( 'my_script', 'my_var', $scriptdata );
    wp_enqueue_script( 'my_script' );

    Im Javascript code kann man nun mit my_var.currency die Währung abrufen.

    Allerdings frage ich mich warum man das Ganze mit einem Shortcode lösen will. Warum erstellt man nicht ein custom user field und schreibt die Währung für den Benutzer ins Profil? Dort könnte man auch Rabatte und sonstiges speichern und die Berechnung in eine Funktion auslagern. Die Ergebnisse dann per Ajax einblenden. Dadurch würde man die teilweise abenteuerliche Berechnung auch nicht im Quelltext preisgeben.

    Und warum wird jQuery in dem Script eingebunden? Das ist bereits in WP enthalten und wird richtigerweise mittels wp_enqueue_script eingebunden. Bei solchen Aktionen ist das nächste Kompatibilitätsproblem fast vorprogrammiert.

    So viele Fragen aber möglicherweise habe ich die Anwendung doch nicht ganz verstanden.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Die globale Variable muss natürlich den User enthalten, da sie ja global gültig ist. Das habe ich im obigen Code nicht berücksichtigt.

    Definition:
    $my_currency = array([COLOR=#333333]$user->user_login => "EUR");

    Verwendung
    $GLOBALS['my_currency'][[/COLOR][COLOR=#333333]$user->user_login[/COLOR][COLOR=#333333]]

    Neben den Fragen in meinem vorherigen Post, muss natürlich auch Raum für die Diskussion um globale Variablen existieren.

    Wie schon angedeutet würde ich die Sache anders lösen.[/COLOR]

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!