Gast2018: Shortcode oder eigene function.php in Wordpress

Hallo, ich habe als ersten Test in einem child-theme in functions.php eine Funktion xy definiert und diese auf einer Seite mit dem shortcode [xy] aufgerufen. Die Funktion fügt an der Aufrufstelle einen Text ein. Wie kann ich die Funktion aber aufrufen, nur wenn auf ein Bild oder einen Text geklickt wird (Link)?

  1. Wie kann ich die Funktion aber aufrufen, nur wenn auf ein Bild oder einen Text geklickt wird (Link)?

    Du musst Dir darüber klar werden, was auf dem Server und was im Browser passiert. Deine Funktion baut auf dem Server irgendwelche Ausgaben in eine Antwort ein, die der Browser erhält.

    Entweder legst Du eine explizite Seite mit einem expliziten Template an in welcher oder welchem Deine Funktion dann aufgerufen wird oder Du rufst die Funktion bei jedem Abruf einer oder bestimmter Ressourcen (Seiten) auf und versteckst den Inhalt bis zum Klick mit CSS. Das Anzeigen/Verstecken kann dann wieder mit JS und/oder CSS gesteuert werden. Oder Deine Funktion prüft den Kontext (z.B. aufgerufene URL) selbst und gibt je nach aufgerufener URL etwas, etwas anderes oder nichts zurück.

    1. @@Regina Schaukrug

      Das Anzeigen/Verstecken kann dann wieder mit JS und/oder CSS gesteuert werden.

      „Oder“??

      LLAP 🖖

      --
      “When UX doesn’t consider all users, shouldn’t it be known as ‘Some User Experience’ or... SUX? #a11y” —Billy Gregory
      1. Ok. Ich korrigiere die ungenaue Formulierung:

        Das Anzeigen/Verstecken kann dann wieder mit JS und/oder CSS gesteuert werden.

        Soll heißen:

        Das Anzeigen/Verstecken kann dann wieder mit reinem CSS (siehe :target) oder mit CSS und JS gesteuert werden.

    2. Da habe ich leider nur "Bahnhof" verstanden. Außerhalb von Wordpress kann ich einfach in einem Link ein PHP-Programm aufrufen. Sollte dies in Wordpress komplizierter sein?

      1. Da habe ich leider nur "Bahnhof" verstanden. Außerhalb von Wordpress kann ich einfach in einem Link ein PHP-Programm aufrufen. Sollte dies in Wordpress komplizierter sein?

        Es geht offenbar nicht um den Aufruf eines "Programmes" (Skript, welches eine "Webseite" erzeugt) sondern einer einzelnen Funktion, die in einem Template hinterlegt und durch einen weiteren Eintrag im Template ausgeführt wird.

        1. Richtig, die Funktion ist in funktion.php definiert und soll beim Klick eines Anwenders auf einen Link ausgeführt werden. Wie muss der link aussehen?

          1. Mit Deinem Konzept wird das nichts. Versuche erst mal herauszubekommen, wie das Auto (In dieser Reihenfolge: HTML, CSS, Javascript, Webserver, PHP, Wordpress) funktioniert bevor Du es tunst. Niemand ist in der Lage (und wenn, dann nicht des Willens), Dir das gesamte Wissen über HTML, CSS, Javascript, Webserver, PHP, Wordpress (in dieser Reihenfolge) in einem Forenbeitrag zu vermitteln. Deine Frage sieht aber so als wäre exakt das notwendig. Übe bitte erst mal an den kleinen Dingen, sonst wird Dir der Zusammenhang nie klar.

            Lagere die Funktion in ein eigenes PHP-Skript aus:

            <?php
            #file: $_SERVER['DOCUMENT_ROOT']/zumGruss.php
            
            header('Content-Type:text/plain; charset="utf-8"');
            
            if (isset( $_GET['typ'] === 'schlapsig' ) ) {
               echo "Tach!";
            } else {
               echo "Guten Tag!";
            }
            

            Bringe wo auch immer in Deinen Templates ETWAS wie

            <script>
                    function getGruss( typ=false ) {
            
                        if ( typ = 'schlapsig' ) {
                            typ = '?typ=schlapsig';
                        } else {
                            typ = '';
                        }
            
                        var xhttp = new XMLHttpRequest();
                        
                        xhttp.onreadystatechange = function() {
                            if ( this.readyState == 4 && this.status == 200 ) {
                                document.getElementByID['gruss']=xhttp.responseText );
                            }
                        };
                        
                        xhttp.open( 'GET', '/zumGruss.php' + typ, true );
                        xhttp.send();
                    }
            </script>
            

            und natürlich

            <p id='gruss'></p><!-- Hier wird die Meldung angezeigt -->
            
            <button id='ButtonGrussNormal'>Normal</button>
            <button id='ButtonGrussSchlaspig'>Schlaspig</button>
            <!-- oder -->
            <a id='LinkGrussNormal'>Normal</a>
            <a id='LinkGrussSchlaspig'>Schlaspig</a>
            <--und darunter ggf. -->
            <script>
               document.getElementById('ButtonGrussNormal').onclick='getGruss()';
               document.getElementById('ButtonGrussSchlaspig').onclick='getGruss("schlapsig")';
            
               document.getElementById('LinkGrussNormal').onclick='getGruss()';
               document.getElementById('LinkGrussSchlaspig').onclick='getGruss("schlapsig")';
            </script>
            

            unter.

            Alternativ kannst Du

            • http://DEIN_SERVER/zumGruss.php oder
            • http://DEIN_SERVER/zumGruss.php?typ=schlapsig

            auch direkt aufrufen.

            1. Vielen Dank für die ausführliche Antwort. Ich muss allerdings anmerken, dass ich ein alter Hase in HTML, CSS und PHP bin und zahlreiche Seiten und Kontaktfomulare erstellt habe, und dies ohne Hilfsmittel sondern nur mit Editoren wie Notepad++. Umso erstaunter bin ich, dass Wordpress als Endanwenderwerkzeug eine triviale Aufgabe wie den Aufruf eines PHP-Programms nicht mindestens so einfach realisieren lässt wie die "native Programmierung".

          2. Verstehe ich nicht. Du hast eine Seite, unter einer URL. In dem dahinter liegenden Script wird eine Funktion aufgerufen. Damit der User da hin kommt, muss er ja schon irgendwo klicken, oder wie kommt er da hin? Wenn du willst, dass er NOCH MAL klicken muß, brauchst du doch nur eine Vorschaltseite mit dem eigentlichen Link.

            1. Die Seite ruft keine Funktion auf. Auf der (z.B.) Startseite steht irgendwo ein Link. Wenn er auf diesen klickt, soll die Funktion aufgerufen werden, in normalen HTML-Dateien sähe dies so aus: <a href="...\xyz.php">Jetzt gehts los</a>

              1. eine Funktion xy definiert und diese auf einer Seite mit dem shortcode [xy] aufgerufen

                Passt doch überhaupt nicht zusammen mit dem was du jetzt sagst.

                1. Ich habe geschrieben, das der shortcode ein erster Test war und ich jetzt etwas weitergehendes machen möchte, nämlich ein Funktionsaufruf wie beschrieben.