Im oberen Abschnitt (fett) wird der Custom Post Type erstellt. Mit der Funktion ‚add_tutorial_cpt_submenu_example‘ wird der Unterpunkt „Einstellungen“ erstellt (hier in Rot dargestellt).
Den Plugin Namen darf es nicht im offiziellen Verzeichnis von WordPress geben, daher vorher im Online-Verzeichnis nachschauen.
HOOKS: Aktionen und Filter
Eine WordPress-Homepage besteht aus einer ganzen Reihe von Funktionen und Datenbankabfragen, wobei WordPress und das Theme zusammenarbeiten, um Text, Bilder, Stylesheets und andere Dateien auszugeben. Der Browser interpretiert all dies und fasst sie alle zu einer Webseite zusammen. Es wird sich an entsprechender Stelle „eingehakt“ und entweder den Wert (add_filter) oder eine Aktion (add_action) ausgeführt.
In seinem gesamten Code hat WordPress „Hooks“ enthalten, damit die Leute ihren eigenen Code an diese Hooks „hängen“ können. Viele der Customizer-Theme-Code-Snippets sind in PHP geschrieben.
Aktionen- und Filter
> Mit Aktionen kann man an einem bestimmten Punkt der Seitenverarbeitung zusätzliche Funktionen hinzufügen. Beispielsweise möchte man möglicherweise zusätzliche Widgets oder Menüs hinzufügen oder der Seite eine Werbebotschaft hinzufügen.
> Mit Filtern kann man Daten abfangen und ändern, während sie verarbeitet werden. Du kannst beispielsweise eine andere CSS-Klasse in ein WordPress-HTML-Element einfügen oder einige der Seitenblöcke ändern.
<?php/* Plugin Name: widbasa_tutDescription: WordPress Plugin Author: WiDBASAVersion: 1.0*/// Filter
add_filter ("the_title" , "widbasa_title");
function widbasa_title( $title )
{
return "Titel: " . $title;
}
// Aktion
/*
Bei Veränderung (Aktualisierung) eines Beitrages, wird
im Hintergund eine E-Mail versendet
*/
add_action('edit_post', 'widbasa_post');
function widbasa_post ($id) {
wp_mail( "mail@widbasa.de",
"Info",
"Der Beitrag #{$id} wurde verändert");
}
GRUNDLEGENDER AUFBAU
Theoretisch könnte man seinen Code auch in die function.php (im entsprechenden Theme-Ordner) einfügen. Technisch würde das funktionieren, wird aber nicht empfohlen. In der function.php sollten sich nur auf das Layout/ die Optik kümmern.
PrOgrAMMIERUNG EINES ShortCodeS
add_shortcode ("widbasa_shortcode", "widbasa_shortcode_function");
function widbasa_shortcode_function ()
{
// NICHT MIT ECHO ARBEITEN!!!
return "<div class='meineClasse'> Hello World </div>";
}
Diesen kann man über seinen WordPress-Editor einfach einbinden:
Möchte man noch JavaScript und CSS einbinden, kann man das folgendermaßen machen:
In diesem Beispiel ist die CCS- und JavaScript-Datei im Plugin-Pfad. Über den Befehl „plugins_url“ werden die Dateien style.css/ script.js eingebunden.
Inhalt von script.js könnte zum Testzweck einfach sein:
alert("Guten Tag");
Das ist nur eine einfache Ausgabe in separaten Fenster.
Zu function getZugangsdaten():
Besser wäre es, die Daten zu verschlüsseln.
Beispiel:
eins = 1
fünf = 5
tier = Vogel
$init_array = parse_ini_file(„sample.ini“);
diese Datei in einem passwort-geschützten Verzeichnis (htaccess) ablegen.
db.class.php
<?php
// >Zugriff auf eine MySQL-Datenbank als Klasse
class db
{
private $server="";
private $user="";
private $passwort;
private $datenbank="";
public $pdo;
function getZugangsdaten ()
{
$this->server="localhost";
$this->user="root";
$this->passwort="passwort";
$this->datenbank="seminar";
} // so nicht machen! Besser wäre, wenn die Daten in einer Datei angelegt sind, die verschlüsselt sind
function __construct()
{
self::getZugangsdaten(); // Weil es eine Methode einer Klasse, daher self
try {
$this->pdo = new PDO ("mysql:host=$this->server;dbname=$this->datenbank;port=3306;charset=utf8",$this->user,$this->passwort);
}
catch (PDOException $e){
echo "Datenbankfehler: " . $e->getMessage()."<br>";
}
}
function runsql($sql,$args = NULL) // 2 Parameter ist optional
{
if (!$args)
{
return $this->pdo->query($sql);
}
$stmt = $this->pdo->prepare($sql); // Vorbereiten des SQL
$stmt->execute($args);
return $stmt;
}
function newKunde ($args)
{
// die(print_r($args));
$sql="insert into kunden (anrede,vorname,nachname,strasse,plz,wohnort,gebdat) values (:w1,:w2,:w3,:w4,:w5,:w6,:w7)";
$stmt = $this->pdo->prepare($sql); // Vorbereiten des SQL
$stmt->bindParam(":w1", $args[0]);
$stmt->bindParam(":w2", $args[1]);
$stmt->bindParam(":w3", $args[2]);
$stmt->bindParam(":w4", $args[3]);
$stmt->bindParam(":w5", $args[4]);
$stmt->bindParam(":w6", $args[5]);
$stmt->bindParam(":w7", $args[6]);
$stmt->execute();
}
}
?>
datenbank.php
<?php
// >Zugriff auf eine MySQL-Datenbank als Klasse
class db
{
private $server="";
private $user="";
private $passwort;
private $datenbank="";
public $pdo;
function getZugangsdaten ()
{
$this->server="localhost";
$this->user="root";
$this->passwort="passwort";
$this->datenbank="seminar";
} // so nicht machen! Besser wäre, wenn die Daten in einer Datei angelegt sind, die verschlüsselt sind
function __construct()
{
self::getZugangsdaten(); // Weil es eine Methode einer Klasse, daher self
try {
$this->pdo = new PDO ("mysql:host=$this->server;dbname=$this->datenbank;port=3306;charset=utf8",$this->user,$this->passwort);
}
catch (PDOException $e){
echo "Datenbankfehler: " . $e->getMessage()."<br>";
}
}
function runsql($sql,$args = NULL) // 2 Parameter ist optional
{
if (!$args)
{
return $this->pdo->query($sql);
}
$stmt = $this->pdo->prepare($sql); // Vorbereiten des SQL
$stmt->execute($args);
return $stmt;
}
function newKunde ($args)
{
// die(print_r($args));
$sql="insert into kunden (anrede,vorname,nachname,strasse,plz,wohnort,gebdat) values (:w1,:w2,:w3,:w4,:w5,:w6,:w7)";
$stmt = $this->pdo->prepare($sql); // Vorbereiten des SQL
$stmt->bindParam(":w1", $args[0]);
$stmt->bindParam(":w2", $args[1]);
$stmt->bindParam(":w3", $args[2]);
$stmt->bindParam(":w4", $args[3]);
$stmt->bindParam(":w5", $args[4]);
$stmt->bindParam(":w6", $args[5]);
$stmt->bindParam(":w7", $args[6]);
$stmt->execute();
}
}
?>
<?php
// Nutzen der Klasse person.class.php
require_once ("classes/person.class.php");
require_once ("classes/kind.class.php");
// neues Object instanziieren (ableiten)
$ich = new person ("Franzel", "Tütenfröhlich", "01.01.1984");
echo "ID-Nummer: ".$ich::$pid."<br>";
//setzen der Eigenschaften
$ich->vorname="Franzel";
$ich->nachname="Tütenfröhlich";
$du = new person ("","","");
echo "ID-Nummer: ".$du::$pid."<br>";
$du->vorname="Annabella";
$du->nachname="Zippenstiel";
$du->setGebdat("07.12.1976");
// Aufruf der Methode
echo "Meine Name ist: " .$ich->anzeigeName()." <br>";
echo "Dein Name ist: " .$du->anzeigeName()." <br>";
echo "Ich bin geboren am: ".$du->getGebdat()."<br>";
$er = new Person("Gerd", "Gurke", "12.09.1987");
echo "ID-Nummer: ".$er::$pid."<br>";
echo "Sein Name ist: ".$er->anzeigeName()."<br>";
$kiddy = new kind("Pauline", "Paulchen", "2.2.2001", "Mädchen");
echo "Mein Kind ist ein " .$kiddy->getGeschlecht(). " und heißt: ".$kiddy->anzeigeName();
echo "ID-Nummer: ".$kiddy::$pid."<br>";
?>
person.class.php
<?php
// Klasse für eine Person
class person
{
// Eigenschaften der Klasse
public static $pid=0; //static ohne ein Objekt verwendbar
public $vorname;
public $nachname;
private $gebdat; // Alle Eigenschafen einer Klasse sollten immer
// private sein und nur pber get und set-Methoden
// veändert werden dürfen (Interface)
function setGebdat ($value)
{
$this->gebdat=$value;
}
function getGebdat ()
{
return $this->gebdat;
}
//************************************************************************************************************
function __construct($vname, $nname, $gebdat) // Der eigene Konstrukor der Klasse
// zum Vorinstallieren der EIgenschaften, spart Schreibarbeit
{
self::$pid++; // Zugriff auf static mit self::
$this->vorname=$vname;
$this->nachname=$nname;
$this->setGebdat($gebdat);
}
//************************************************************************************************************
function getPID()
{
return self::$pid;
}
function anzeigeName() {
//$this ist eine Referenz auf das Objekt selbst
return $this->vorname." ". $this ->nachname;
}
}
?>
<?php
// Kindklasse erbt von person.class.php alle public-eigenschaften und public-methoden
require_once ("person.class.php");
class kind extends person // extends bedeutet beerbt Klasse personimplements
{
public $geschlecht;
function __construct($vname,$nname,$gebdat,$geschlecht)
{
parent:: __construct($vname, $nname, $gebdat); // Aufruf des BasisKonstruktor
$this->geschlecht = $geschlecht;
}
function getGeschlecht() {
return $this->geschlecht;
}
}
?>
Ich wollte für meine Startseite einen individuellen Befehl im HEAD-Bereich einfügen. Um etwas genauer zu sein, eine Weiterleitung auf eine andere Seite. Ich hatte geschaut, ob ich das direkt in den Theme-Daten mache, aber das schien mit in meiner Konstellation bzw. mit dem vom mir verwendeten Theme etwas aufwendig zu sein. Daher habe ich nach einer Plugin-Lösung gesucht und einiges getestet.
PLUGIN
Das Plugin „Head, Footer and Post Injections“ von S. Lissa hat genau das gemacht, was ich wollte.
Wenn man unter „ONLY THE HOME PAGE“ den entsprechenden Befehl einträgt, wird dieser auch nur auf der Startseite ausgeführt. Das Plugin könnte theoretisch noch mehr. Nur für mich war dieses Feature relevant.
Damit man solche FrameWorks wie OXID, Lavarel, Flarum etc. installieren kann, braucht man den Composer. Die Installation erfolgt durch einen SSH-Zugang. Bei meinem Webhosting-Paket war das nicht inklusive. Ich müsste das Paket auf Server umstellen und das kostet statt 4,99 € dann 19,99 €.
Ich habe erstmal auf das Upgrade verzichtet und das ganze lokal compiliert. Dazu sind folgende Schritte notwendig: