1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

Übergabe eines Custom Fields aus Datenbank in eigenes Feld

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von jannikjohn98, 9. Oktober 2019.

  1. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    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. Screenshot_Datenbank.png Screenshot_Datenbank.png

    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
     
  2. wp-entwickler

    wp-entwickler Well-Known Member

    Registriert seit:
    23. Oktober 2018
    Beiträge:
    75
    Zustimmungen:
    7
    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:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  3. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Eigene SQL-Selects sollte man solange vermeiden, solange es eine native WordPress Funktion gibt.
     
  4. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    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:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    greift es auch nicht.
     
  5. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    Hast Du eventuell eine alte PHP Version?

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Das geht natürlich nur, wenn der Benutzer angemeldet ist. Aber das sollte ja klar sein.
     
  6. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    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.
     
  7. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    Das gibt es nicht. Das php error.log zeigt immer seinen Stacktrace bei einem fatalen Fehler..
     
  8. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    Fehler ist weg, nur eine fehlende Klammer in der if-Funktion.
     
  9. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    Ich hatte die Klammer im Beitrag ergänzt. Du hast die Funktion wahrscheinlich aus der E-Mail kopiert.
     
  10. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    Ganz genau.

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    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.
     
  11. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    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)
     
  12. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    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:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  13. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    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.
     
  14. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    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.
     
  15. r23

    r23 Well-Known Member

    Registriert seit:
    9. Dezember 2006
    Beiträge:
    4.469
    Zustimmungen:
    49
    eine Funktion hat leider nichts in einer If Abfrage verloren. Schreibe deine Funktion ausserhalb von deiner IF Abfrage
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    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:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Script jetzt nicht geprüft...
     
  16. wp-entwickler

    wp-entwickler Well-Known Member

    Registriert seit:
    23. Oktober 2018
    Beiträge:
    75
    Zustimmungen:
    7
    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.
     
  17. jannikjohn98

    jannikjohn98 Member

    Registriert seit:
    9. Oktober 2019
    Beiträge:
    8
    Zustimmungen:
    0
    Danke nochmals für die vielen Tipps.

    Habe es jetzt wie folgt hinbekommen:

    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Die URL google.de ist nur Platzhalter.
     
  18. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    6.123
    Zustimmungen:
    539
    Am Rande bemerkt, die Nutzung von intval() ist ggf. zu überdenken, hier ein paar Beispiele, die alle 1 ergeben:
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
     
  19. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    7.704
    Zustimmungen:
    208
    Laut TO gibt es nur die Werte 0 und 1. intval() ist daher genau der richtige Weg.
     
  20. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    6.123
    Zustimmungen:
    539
    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 !empty() verwenden.
     
    #20 b3317133, 10. Oktober 2019 um 23:35 Uhr
    Zuletzt bearbeitet: 10. Oktober 2019 um 23:41 Uhr
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden