Kategorie: WordPress

  • Projektvorstellung: Simple Event Product for WooCommerce

    Projektvorstellung: Simple Event Product for WooCommerce

    So ähnlich klang mein innerlicher Schrei, als ich auf der Suche nach einem Plugin war, um einen Anmeldeservice für die nächste „Bama“ auf der Vereinswebseite https://bademanteltour.de zu realisieren. Die Anforderungen waren klar: kostenlos, einfach zu bedienen und ohne nervige Werbung für irgendwelche Pro-Features. Klingt machbar, oder? Tja, denkste!

    Nach stundenlanger Recherche und zahllosen Tests war ich frustriert. Zwar gibt es unzählige WordPress- und WooCommerce-Plugins für Events, aber entweder waren sie so veraltet, dass sie gefühlt aus der Zeit von MySpace stammten, oder sie waren kostenpflichtig – mieten oder kaufen war die Devise. Und so kam ich zu dem Schluss: Wenn es nichts Passendes gibt, mache ich es eben selbst!

    Was brauche ich eigentlich?

    Ein Blick in den Anforderungskatalog hat schnell gezeigt: Es sollte eine Art Bestellsystem mit einem neuen Produkttyp werden. Da die Vereins-Website WooCommerce nutzt, konnte ich direkt die API nutzen, um das System zu erweitern.

    Das Produkt sollte folgende Features haben:

    • Start- und Endzeitpunkt.
    • Optional einen Veranstaltungsort.
    • Die Möglichkeit, sowohl virtuell als auch live vor Ort stattzufinden.
    • Auf der Produktseite einen zusätzlichen Reiter „Veranstaltung“, der eine OpenStreetMap anzeigt.
    • Die Option, das Event per Klick direkt in den Kalender zu speichern (am besten per Link).

    Außerdem sollte es möglich sein, bei der Anmeldung individuelle Daten wie Namen oder andere Infos einzugeben, die dann direkt ins Bestellsystem übertragen werden.

    Weil das Ganze auch ohne Events genutzt werden können soll, habe ich mich dafür entschieden, ein eigenes Plugin zu entwickeln, das unabhängig von WooCommerce läuft. Das Ergebnis heißt: „Extra Product Data for WooCommerce“ – und wie genau es funktioniert, erzähle ich euch in einem späteren Beitrag.

    Wie ist der aktuelle Stand?

    Aktuell befindet sich das Plugin im Prüfprozess der WordPress-Reviewer. Sobald es freigegeben wird, steht es allen zur Verfügung!

    Git Repository

    Screenshots

  • WordPress Kopier-Funktion beim Code-Block einfügen

    WordPress Kopier-Funktion beim Code-Block einfügen

    Table of Contents

      Vielleicht ist es euch in einem vorherigen Beitrag aufgefallen: Es gibt die Möglichkeit, Code in einem Code-Block per Button zu kopieren. Diese Funktion ist jedoch standardmäßig nicht im Core-Code-Block von WordPress enthalten. Kein Grund zur Sorge! Mit einem kleinen Snippet könnt ihr diese Funktionalität ganz einfach zu euren Beiträgen hinzufügen.

      So geht’s:

      1. Erstellt einen HTML-Block in eurem Beitrag oder fügt das Snippet direkt in eure Theme-Dateien ein, falls es global gelten soll.
      2. Fügt den folgenden Code ein:
      <script>
      document.addEventListener('DOMContentLoaded', function () {
          // Alle Code-Blöcke im Beitrag finden
          var codeBlocks = document.querySelectorAll('.wp-block-code');
      
          codeBlocks.forEach(function (block) {
              var code = block.querySelector('code');
              if (!code) return; // Überspringen, falls kein <code> im Block ist
      
              // Button erstellen
              var button = document.createElement('button');
              button.textContent = 'Copy Code';
              button.style.cssText = `
                  position: absolute; 
                  top: 0; 
                  right: 0; 
                  margin: 4px; 
                  padding: 4px 8px; 
                  font-size: 12px; 
                  background-color: rgba(200, 200, 200, 0.2); 
                  color: #fff; 
                  border: none; 
                  border-radius: 4px; 
                  cursor: pointer; 
                  transition: all 0.2s ease-in-out;
              `;
      
              // Button Hover-Effekte
              button.addEventListener('mouseenter', function () {
                  button.style.backgroundColor = 'rgba(0, 0, 0, 0.1)';
              });
      
              button.addEventListener('mouseleave', function () {
                  button.style.backgroundColor = 'rgba(200, 200, 200, 0.2)';
              });
      
              // Klick-Event zum Kopieren
              button.addEventListener('click', function () {
                  // Codeinhalt kopieren
                  var range = document.createRange();
                  range.selectNodeContents(code);
                  var selection = window.getSelection();
                  selection.removeAllRanges();
                  selection.addRange(range);
      
                  try {
                      document.execCommand('copy');
                      button.textContent = 'Copied!';
                      button.style.backgroundColor = '#333';
                      button.style.color = '#fff';
                  } catch (err) {
                      console.error('Copy failed', err);
                      button.textContent = 'Failed!';
                  }
      
                  // Auswahl zurücksetzen
                  selection.removeAllRanges();
      
                  // Button nach 3 Sekunden zurücksetzen
                  setTimeout(function () {
                      button.textContent = 'Copy Code';
                      button.style.backgroundColor = 'rgba(200, 200, 200, 0.2)';
                      button.style.color = '#fff';
                  }, 3000);
              });
      
              // Block-Style anpassen
              block.style.position = 'relative';
              block.insertBefore(button, code);
          });
      
          // Farbe für den Text in Code-Blöcken setzen
          document.querySelectorAll('.wp-block-code pre').forEach(function (text) {
              text.style.color = '#fff'; // Optional: Kann entfernt oder angepasst werden
          });
      });
      </script>

      Nun schreibt ein Beitrag und veröffentlicht es. Ihr werdet sehen, dass nun der Button bei jedem Code Block vorhanden ist.

      Anleitung zur Anpassung des Stils

      Der Button wird durch Inline-Styles direkt im Script gestaltet. Wenn ihr das Design anpassen möchtet, könnt ihr die CSS-Eigenschaften im JavaScript ändern. Die Anpassung ist ganz einfach!

      Stil anpassen

      Hier ist der Abschnitt des Codes, der den Button-Style definiert:

      button.style.cssText = `
          position: absolute; 
          top: 0; 
          right: 0; 
          margin: 4px; 
          padding: 4px 8px; 
          font-size: 12px; 
          background-color: rgba(200, 200, 200, 0.2); 
          color: #fff; 
          border: none; 
          border-radius: 4px; 
          cursor: pointer; 
          transition: all 0.2s ease-in-out;
      `;
      

      So könnt ihr den Stil ändern

      Position:


      Möchtet ihr den Button an einer anderen Stelle platzieren, könnt ihr die Werte von top, right, bottom, oder left anpassen.
      Beispiel:

      button.style.cssText = 'position: absolute; bottom: 10px; left: 10px;';

      Hintergrundfarbe


      Die Eigenschaft background-color legt die Hintergrundfarbe fest. Hier könnt ihr Farbwerte in rgba, Hexadezimal (#333) oder als Farbnamen (z. B. red) verwenden.
      Beispiel:

      button.style.backgroundColor = '#0073aa'; // WordPress-Blau

      Größe


      Über padding und font-size könnt ihr die Größe des Buttons anpassen.
      Beispiel:

      button.style.padding = '8px 16px';
      button.style.fontSize = '14px';

      Ecken abrunden


      Mit border-radius könnt ihr runde oder eckige Buttons erstellen.
      Beispiel:

      button.style.borderRadius = '0'; // Keine Abrundung

      Schriftfarbe


      Die Textfarbe wird mit color definiert.
      Beispiel:

      button.style.color = '#000'; // Schwarzer Text

      Übergangseffekte

      Der Button hat bereits einen Hover-Effekt (mouseenter und mouseleave), bei dem die Hintergrundfarbe geändert wird. Möchtet ihr weitere Effekte hinzufügen, könnt ihr das transition-Property anpassen.
      Beispiel:

      button.style.transition = 'transform 0.3s ease-in-out';
      button.addEventListener('mouseenter', function () {
          button.style.transform = 'scale(1.1)'; // Button wird leicht größer
      });
      button.addEventListener('mouseleave', function () {
          button.style.transform = 'scale(1)';
      });

      Fazit

      Das Inline-Styling im Script macht den Button flexibel und leicht anpassbar. Ihr könnt durch kleine Änderungen an den Eigenschaften den Button an euer Design anpassen – egal ob ihr minimalistisch, farbenfroh oder modern arbeiten möchtet.

      Falls ihr ein konsistentes Design in eurem gesamten Blog haben möchtet, könnt ihr das Styling auch in eine separate CSS-Datei auslagern. Dafür müsst ihr die Inline-Styles durch CSS-Klassen ersetzen.