Suche Hilfe beim WordPress Plugin (Entwicklung)

  • Hallo ihr lieben,

    ich arbeite gerade an einem simplem WordPress Plugin, dass bereits fertig ist. Lieder hapert es an einer Stelle und ich hoffe, ihr könnt mir helfen.

    Ganz simpel formuliert erzeugt der Shortcode meines Plugins eine Suchbox, die es erlaubt, eine Tabelle mit einer bestimmten ID zu filtern und den Suchplatzhalter, sowie die CSS-Klasse festzulegen.

    Es gibt dazu einen JavaScript Funktion in einer JavaScript Datei und eben diese Datei hier:
    Das Problem steckt im fett markierten Bereich, denn gebe ich Beispielsweise den Shortcode

    [tablesearch id="meineTabelle"] ein, so wird für das Event onkeyup=" meinetabelle"] ausgegeben.

    In HTML dann so

    Code
    <input class="main" type="text" onkeyup="filterTo(this.value," heldenstufentabelle")"="" placeholder="search something">

    Wir verhindere ich, dass
    a) in Kleinbuchstaben umgewandelt wird und
    b) das Leerzeichen davor erscheint.
    c) das ="" vor dem placeholder attribut verschwindet.

    2 Mal editiert, zuletzt von digiblogger (21. November 2018 um 17:04)

    • 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

  • Ok dann hier der gesamte Code

    tablesearch.php

    tablesearch.js

    Code
    function filterTo(input, table) {
    var tr = document.getElementById(table).getElementsByTagName('tr');
    for (var i = 1; i < tr.length; i++) {
        var td = tr[i].getElementsByTagName('td');
        var hide = true;
        for (var j=0; j<td.length; j++) {
            if (td[j].innerHTML.toUpperCase().indexOf(input.toUpperCase()) > -1) { hide=false; break }
        }
        tr[i].style.display = hide ? 'none' : '';
    } }

    Wenn ich den Shortcode zum Beispiel so eingebe:

    Code
    [tablesearch id="MeineTabelle" class="main" placeholder="Search something"]

    wird die Suchbox zwar ausgegeben, doch der Quellcode sieht so aus:

    Code
    <input class="main" type="text" onkeyup="filterTo(this.value," meinetabelle")"="" placeholder="Search something">

    Fehler 1:
    Leerzeichen vor meinetabelle
    Fehler 2:
    Es soll MeineTabelle heißen
    Fehler 3
    Das ="" vor placeholder

  • Hier sieht der Quellcode mit Deinem Shortcode und Eingabe Beispiel so aus:

    Code
    <input class="main" type="text" onkeyup="filterTo(this.value,meineTabelle)" placeholder="Search something">


    Deaktiviere mal temporär der Reihe nach alle Plugins und teste dazwischen und falls das nicht hilft, verwende temporär ein Standard Theme wie Twenty Seventeen, evtl. gibt es da irgendwelche Filter oder andere Einflüsse. Welche genaue WordPress Version wird verwendet?

  • Das kann man eigentlich ausschließen.
    Denn wenn ich den Code für die Input Box einfach in den Text Editor des Beitrags eingebe und das Javascript in den Header lade, funktioniert das Ganze wunderbar.

    Nur die Umsetzung via Shortcode klappt nicht.

  • Nunja, Du suchst Hilfe.

    Ich teste das und sage Dir, hier funktioniert der gepostete Shortcode Code mit dem geposteten Beispiel einwandfrei.

    Und bei Dir nicht.

    Also kann man nichts ausschliessen... viel Erfolg bei der Lösung.

  • Ich danke dir für dein Feedback.
    Aber wenn Du genau diesen Code getestet hast, kann das unmöglich klappen und ich weiß imme rnoch nicht, wieso.

    Ich habe nun ALLE Plugins deinstalliert und bin auf WP Standard Theme.

    Die Dateien habe ich 1:1 wie oben übernommen.

    Auf der Seite wurde im Editor das eingegeben:

    Code
    [tablesearch id="MeineTabelle" class="main" placeholder="Search something"]
    
    
    <table id="MeineTabelle">
    <tr><td>AB</td><td>CD</td><td>EF</td><td>AB</td><td>CD</td><td>EF</td></tr>
    <tr><td>GH</td><td>IJ</td><td>KL</td><td>GH</td><td>IJ</td><td>KL</td>
    <tr><td>MN</td><td>OP</td><td>QR</td><td>MN</td><td>OP</td><td>QR</td>
    <tr><td>ST</td><td>UV</td><td>WX</td><td>ST</td><td>UV</td><td>WX</td>
    </table>


    Fehler:

    Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ' tablesearch' not found or invalid function name in /www/htdocs/meinewebsite.de/wp-includes/class-wp-hook.php on line 286

    Ich hab mir auch die class-wp-hook.php angesehen. Das ist ne Stelle, die mit AVOID ARRAY SLICE IF POSSIBLE überschrieben ist und WP Standard zu sein schein.

    Da ich nun keinen fremden Code, keine Plugins und nur noch ein Theme von WordPress aktiv habe, wüsste ich nur zu gerne, wie das bei dir klappen kann.

  • Der PHP-Code aus #1 mit dem Shortcode-Text aus #3 ergibt wie bereits beschrieben die Ausgabe aus #4, und keine PHP-Warnung.

    Wenn man dann den JavaScript Code aus #3 und den Tabellen-HTML-Code aus #5 ergänzt, ergibt das in der Browser Konsole erstmal einen [FONT=Courier New]TypeError: document.getElementById(...) is null[/FONT], was daran liegt, dass [FONT=Courier New]meineTabelle[/FONT] nicht in Anführungszeichen steht.

    Wenn man dann im PHP-Code aus #1 die Zeile

    Code
    return $script . '<input class="'. $atts['class'].'" type="text" onkeyup="filterTo(this.value,'. $atts['id'].')" placeholder="'.$atts['placeholder'].'">';

    ersetzt durch

    Code
    return $script . '<input class="'. $atts['class'].'" type="text" onkeyup="filterTo(this.value,\''. $atts['id'].'\')" placeholder="'.$atts['placeholder'].'">';

    dann klappt auch das, und bei Eingaben passiert irgendwas mit den Tabellenzeilen, sie werden teils unsichtbar.

    Link zu Deiner Seite mit der Shortcode-Ausgabe?

  • Das wäre hier.

    http://lords.wikituts.de/cookie/basics/test/

    Du siehst dort auch die Fehlerausgabe. Vielleicht hast Du dazu eine Idee.

    Ich habe das Gefühl, dass die JS-Datei nicht ordentlich geladen wird.
    Wenn ich nämlich zum Beispiel ein Plugin verwende, um JS in den Header zu laden, klappt das Filtern der Tabelle.

    Aber das soll ja über die beiden Files klappen und ohne weiteres plugin.

    Würdest Du mir mal die beiden Files so anhängen, wie sie nun bei dir aussehen.
    Wenn ich deiner Anleitung folge, kriege ich noch mehr Fehler :)

    1. der PHP-Code aus #1 erscheint als Klartext sichtbar im Header der Seite, da gehört er nicht hin.
    2. der Shortcode im Beitrag zeigt für die Parameter sog. Curly Quotes wie z.B. “, da gehören einfache " oder ' hin, das kann auch an 1. liegen, weil der Shortcode gar nicht ausgeführt wird.


    Komplett fertige Lösungen bekommt man in der Jobbörse des Forums. Die freiwilligen Helfer hier im Forum bieten Hilfe zur Selbsthilfe, es geht v.a. darum, dass man versteht, was da passiert, und dadurch selbst lernt..

  • Ich hab den Fehler gefunden. Das Script wahr falsch eingebunden und meiner PHP Datei fehlte der öffnende PHP Tag, was den Fehler auf der Seite erklärt.

    TAUSEND DANK. :)

    Schau mal jetzt. So sollte es passen oder? Gleiche Seite

Jetzt mitmachen!

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