Übergabe eines Custom Fields aus Datenbank in eigenes Feld

  • Hallo zusammen,

    ich benötige derzeit in einem eigenen Plugin Hilfe.
    Und zwar habe ich in der WordPress Datenbank in der Tabelle prefix.usermeta den meta_key "checksumme". Dort ist beim Benutzer der Wert 1 eingetragen, mithilfe dieser 1 soll im Plugin eine if-Funktion gesteuert werden. (Screenshot des Datenbankeintrags habe ich angehängt). Der richtige Benutzer soll anhand der User-ID erkannt werden.

    Der Plugincode an der Stelle sieht wie folgt aus:

    /* Get the current user's ID */
    add_action('init','getUserID');
    function getUserID() {
    $user_id = get_current_user_id();
    }

    function databaseconnect()
    {
    global $wpdb;
    $results = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM mittag_rplusermeta WHERE meta_key = \'checksumme\' AND user_id = %d", $user_id )) ;
    }

    Danach soll mit if($results == 1 ) eine Aktion ausgeführt werden (diese funktioniert bereits).

    Der Übergabewert in $results sollte meiner Meinung nach dem Wert 1 entsprechen, aber es greift nicht.

    Über eine Idee würde ich mich freuen, Danke im Voraus.

    Gruß Jannik

    • 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

  • KLar greift es nicht, weil die variable aus der einen Funktion nicht in der anderen verfügbar ist.
    Aber der erste hook ist doch sowieso unnötig.
    Nutz doch gleich get_current_user_id() in der zweiten funktion:

    Code
    function databaseconnect()
    {
    global $wpdb;
    $results = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM mittag_rplusermeta WHERE meta_key = \'checksumme\' AND user_id = %d", get_current_user_id())) ;
    }
  • Code
    $checksum = get_user_meta( get_current_user_id(), 'checksumme' , true );

    Eigene SQL-Selects sollte man solange vermeiden, solange es eine native WordPress Funktion gibt.

    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.

  • Hallo,

    danke für beiden Antworten. Ich habe beide Varianten ausprobiert, leider auch hier wieder keine Reaktion.

    Die Abfrage im phpMyAdmin (sprich SQL Query) gibt den Wert 1 aus, 1 ist hier ein int falls dies relevant ist. Dies scheint also im Prinzip zu funktionieren.

    Meine Vermutung ist, dass er die aktuelle User-ID nicht bekommt. Wenn ich die if-Funktion direkt über die User-ID laufen lasse, bspw.

    PHP
    if ( $user_id == 1)
    {
    
    
    }

    greift es auch nicht.

  • Hast Du eventuell eine alte PHP Version?

    Code
    $user_id = get_current_user_id();
    $checksum = get_user_meta( $user_id, 'checksumme' , true );
    if ( 1 == intval( $checksum ) ) {
         # do something
    }

    Das geht natürlich nur, wenn der Benutzer angemeldet ist. Aber das sollte ja klar sein.

    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 PHP-Version ist aktuell.

    Selbstverständlich ist der Benutzer angemeldet, in diesem Fall der Administrator (User-ID 1).

    Der oben genannte Code löst leider immer wieder einen fatalen Fehler beim Aktivieren des PlugIns aus, allerdings ohne Fehlerursache. Das würde ich mir vorweg nochmal kurz anschauen.

  • fatalen Fehler beim Aktivieren des PlugIns aus, allerdings ohne Fehlerursache.

    Das gibt es nicht. Das php error.log zeigt immer seinen Stacktrace bei einem fatalen Fehler..

    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.

  • Ich hatte die Klammer im Beitrag ergänzt. Du hast die Funktion wahrscheinlich aus der E-Mail kopiert.

    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.

  • Ganz genau.

    So ist der Code nun drin, ebenfalls wieder ohne Reaktion.
    Bei Zugriff auf den Warenkorb oder auf die Kasse müsste per JavaScript der Alert auslösen. In der Theorie.

  • Das funktioniert so nicht. die Abfrage der User ID liegt ja außerhalb der Funktion. Und dann ist ja noch die Frage wann die Anzeige erfolgen soll und was passieren soll. Der template_redirect action hook hat ja eine spezielle Funktion. Erzähle uns doch einmal die gesamte Story. Dann kann man auch richtig helfen.

    Und noch ein Tipp: Alert ist Pfui. Schreib Debug Informationen in die Browserkonsole (console.log)

    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.

  • Also das Prinzip ist wie folgt:

    Im Benutzerprofil ist ein Feld hinterlegt, wo die Checksumme 0 oder 1 eingetragen werden kann.
    Die Benutzer mit der Prüfsumme 1 sollen kein Zugriff auf den Warenkorb und die Kasse, also prinzipiell auf die Bestellfunktion bekommen. Dieses soll zusätzlich nur auf die Tage Dienstag und Donnerstag greifen.

    Wenn die Bedingungen passen, also es ist Dienstag oder Donnerstag und die Prüfsumme ist gleich 1, soll eine Weiterleitung oder ein Pop-Up-Fenster erscheinen mit einer Information über die Sperre.

    Hier nochmal der gesamte Code:

  • Wie ich schon sagte, eine Abfrage außerhalb der Funktion geht nicht. Das ganze gehört in eine Klasse. Dann kann man die User_Id im Constructor auslesen und für die aktuelle Session speichern. Im Anschluss kann man dann aller weiteren notwendigen Schritte einleiten (Bestellbutton entfernen, Zugriff auf Warenkorb und Kasse entfernen, usw.)

    Mehr kann ich leider nicht mehr helfen, da ich gestern eine Anfrage erhalten habe wo es genau darum geht, die Bestellfunktion am Dienstag und Donnerstag zu ermöglichen. Das mag Zufall sein, aber ich muss davon ausgehen, dass es sich genau um diese Anfrage handelt.

    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.

  • Danke sehr für den Lösungsansatz, das werde ich mir morgen dann genauer anschauen.
    Hier wird es sich tatsächlich um eine Zufall handeln, aber das ist kein Problem. Danke nochmals und einen schönen Abend noch.


  • Wenn die Bedingungen passen, also es ist Dienstag oder Donnerstag und die Prüfsumme ist gleich 1, soll eine Weiterleitung oder ein Pop-Up-Fenster erscheinen mit einer Information über die Sperre.

    eine Funktion hat leider nichts in einer If Abfrage verloren. Schreibe deine Funktion ausserhalb von deiner IF Abfrage

    PHP
    function custom_shop_page_redirect()
                {
                    if(is_cart() || is_checkout())
                    {
                    echo '<script language="javascript">';
                    echo 'alert("Shop ist gesperrt!")';
                    echo '</script>';
                    }
                }

    Bitte im PHP Handbuch nachlesen

    https://www.php.net/manual/de/functions.user-defined.php


    Wenn deine Bedingungen erfüllt sind, kannst du deine Funtion aufrufen

    PHP
    if ( 1 == intval( $checksum ))
    {
        if ( $tag == 2 || $tag == 4 )
        {
           custom_shop_page_redirect();
        }
     }

    Script jetzt nicht geprüft...

    Mit offenen Augen träumen

  • 1. ist "checksumme" ein denkbar dämlicher Name für deinen user meta eintrag, weil es hier 1. nicht um eine checksum geht und der Name einfach nichts aussagt.

    2. ist die user anmeldung wahrscheinlich in deiner plugin-datei noch gar nicht durch (ich gehe jetzt mal davon aus dass der code aus deiner plugin-datei ist) und deswegen wird dort get_current_user_id() nicht funktionieren.
    Du brauchst einen passenden hook.
    Bau doch einfach den check auf die user meta IN die funktion im hook ein, also "custom_shop_page_redirect".
    Du machst es dir unnötig kompliziert,

    3. Solltest du die basics des debuggens lernen, damit du mal weisst, warum dein code nicht funktioniert.

  • Danke nochmals für die vielen Tipps.

    Habe es jetzt wie folgt hinbekommen:

    Die URL google.de ist nur Platzhalter.

  • Am Rande bemerkt, die Nutzung von [FONT=Courier New]intval()[/FONT] ist ggf. zu überdenken, hier ein paar Beispiele, die alle [FONT=Courier New]1[/FONT] ergeben:

  • Am Rande bemerkt, die Nutzung von [FONT=Courier New]intval()[/FONT] ist ggf. zu überdenken, hier ein paar

    Laut TO gibt es nur die Werte 0 und 1. intval() ist daher genau der richtige Weg.

    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.

  • Wenn es nur 0 oder 1 gäbe, bräuchte man intval() gar nicht... beim Tagesvergleich wird auch String mit int durcheinandergeworfen, dort scheint es ja zu klappen.

    Wenn man ein Custom Field als "bool" missbrauchen will, sollte man eher [FONT=Courier New]!empty()[/FONT] verwenden.

    4 Mal editiert, zuletzt von b3317133 (10. Oktober 2019 um 23:41)

Jetzt mitmachen!

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