WordPress: Meine häufig genutzten Funktionen, Klassen, Styles

Was ist HTML Code

Ich werkele nicht täglich im WordPress Quellcode herum oder versuche Plugins zu programmieren. Dementsprechend gerät einmal angelerntes ohne wiederholte Nutzung schnell wieder ins Vergessen. Zumindest ergeht es mir so, weshalb ich aus Eigennutz in diesem Beitrag Funktionen aufliste, die ich mindestens einmal nutzte.

Inspiriert von: revilodesign.de | get_posts |

Datenbank-Abfrage mit Klasse wpdb

Wenn eine WordPress-Tabelle gelesen werden soll, ist der sogenannte Prefix wichtig. Es ist der kleine Textzusatz unmittelbar vor dem Tabellennamen. Ermittelt wird er mit „$wpdb->prefix“.

SELECT: Daten suchen in einer Tabelle

In diesem Beispiel werden aus der WordPress-Tabelle „posts“ alle publizierten Beiträge (posts) aufgelistet.

global $wpdb;
$Daten = $wpdb->get_results("SELECT *  FROM ".$wpdb->prefix."posts WHERE post_status = 'publish' AND post_type = 'post'");

if(!empty($Daten)){ // DATEN WURDEN GEFUNDEN
    foreach ( $Daten as $Daten_Satz ) {
        echo '<br>'.$Daten_Satz->post_title;
    }
}else{ // KEINE DATEN WURDEN GEFUNDEN
    echo 'Keine Treffer gefunden!';
}

$wpdb->get_row: Einzelne Zeile auslesen

Mit $wpdb->get_row wird eine einzelne Zeile abgerufen. Gibt es mehrere Zeilen, wird nur die erste ausgeben.

$daten = $wpdb->get_row("SELECT *FROM ".TABLE_SETTINGS." WHERE id = 1");

define("GEO_LOCATION", 	$daten->GEO_LOCATION); 
define("RELOAD_SPERRE",	$daten->RELOAD_SEKUNDEN); 
define("RELOAD_AKTIV",	$daten->RELOAD_AKTIV);

TABLE_SETTINGS liegt als Konstante vor.


$wpdb->num_rows: Treffer zählen

Die Funktion $wpdb->num_rows gibt die Anzahl der gefundenen Treffer zurück, muss aber direkt nach dem Aufruf „$wpdb->get_results()“ erfolgen.

$Daten = $wpdb-> get_results("SELECT * FROM ".TABLE_RELOAD." WHERE ip='$ip' AND seite='$Seite'");
$visit = $wpdb->num_rows;

$wpdb->UPDATE: Felder einer Zeile aktualisieren

Es ist übersichtlicher und vereinfacht eine mögliche Fehlersuche, wenn die einzelnen Argumente in Arrays verpackt werden. Für das Format gibt es nur drei Möglichkeiten: %s steht für String (Text), %d für Integer (ganze Zahlen) und %f für Float (Gleitkommazahlen).

$data 	= array(
	'ip' 	=> $ip,
	'datum' => $heute,
	'view' 	=> $daten[0]->view+1
	);

$format = array(
	'%s',
	'%s',
	'%d'
	) ;

$where 	=  array('seite' => $Seite);

$result = $wpdb->update(TABLE_ARTIKEL, $data, $where, $format);

$wpdb->INSERT: Neue Zeile in Tabelle eintragen

Wenn in eine WordPress-Tabelle etwas geschrieben oder verändert werden soll, ist der oben erwähnte Prefix zu beachten.

$data 	= array(
    'ip' 		=> $ip,
    'seite' 	=> $Seite,
    'datum' 	=> $heute
    );

$format = array(
    '%s',
    '%s',
    '%s'	
    );

$wpdb->insert(TABLE_ARTIKEL,$data,$format);

$wpdb->DELETE: Datensätze löschen

Manchmal sind Datensätze in einer Tabelle zu löschen.


$where 	=  array('timestamp' < $timestamp_alt);

$format = array( '%d' );

$wpdb->delete(TABLE_RELOAD, $where, $format);  

$wpdb->PREPARE: Datenbank vor SQL-Injektion schützen

–> Gute Erklärung


Funktionen & Snippets

Beiträge einer/ aller Kategorien auflisten

Der folgende Code listet 10 Beiträge aus der Kategorie „Lexikon“ mit Titel und Inhalt auf. Es wird die Klasse „WP_Query“ verwendet.

$my_query = new WP_Query('category_name=Lexikon&showposts=10'); 

while ($my_query->have_posts()) : $my_query->the_post(); 
	the_title(); 
	the_content();
endwhile;

Beiträge auflisten mit spezifischen Angaben

Dieser Code erledigt Ähnliches. Aus der Kategorie „Lexikon“ werden 10 Beiträge geholt. Genutzt wird die Funktion get_posts($args). Ausgegeben werden in diesem Beispiel:

  • Titel: $post->post_title
  • URL des Thumbnail: get_the_post_thumbnail_url($post->ID, ‚full‘)
  • Link zum Artikel: get_permalink($post->ID)

//Parameter für Posts
$args = array(
    'category_name' => 'Lexikon',
    'numberposts' => 10
);

//Posts holen
$posts = get_posts($args);

//Inhalte sammeln
$content = "";
foreach ($posts as $post) {
    $content .= "Titel: ".$post->post_title."<br/>";
    $content .= "Bild URL: ".get_the_post_thumbnail_url($post->ID, 'full')."<br/>";
    $content .= "Link: ".get_permalink($post->ID)."<br/>";
    $content .= "<br/><br/>";
}

Zeichen im Post zählen

Ich möchte ermitteln, wie viele Zeichen ein Beitrag enthält. Ohne ein fremdes Plugin zu installieren. Zunächst suchte ich nach einer WP-Tabelle, die eventuell Informationen darüber enthält. Schließlich zeigt mit der Gutenberg-Editor ja auch an, wie viele Zeichen mein Post belegt. Aber da wurde ich nicht fündig. Möglicherweise übersah ich etwas.

Eine Google-Suche nach „wordpress function count post char“ brachte wenigstens einen Ansatz. WordPress kennt die Funktion „wp_strip_all_tags($post->post_content)“. Sie bereinigt die Variable post_content um nichtdruckbare Zeichen und zählt die lesbaren Zeichen (inkl. Leerzeichen).

Diese Funktion liefert ähnliche Ergebnisse wie der Gutenberg-Editor, weshalb ich sie vorerst nutze.

Dank dieser Funktion kann ich nun gezielt alle Artikel auflisten, die

  • vom Typ „Beitrag“ sind und
  • veröffentlicht wurden und
  • mindestens XYZ Zeichen auf die Waage bringen.

Die Funktion strip_shortcodes() soll zusätzlich Short-Codes heraus fischen.

$count_char = strlen(wp_strip_all_tags(strip_shortcodes($post->post_content)));

Tags eines Posts auflisten

Wenn Du alle Tags, Schlagwörter eines Beitrages ermitteln willst, nutzt Du die Funktion

$post_tags = get_the_terms( $post_id, 'post_tag' );
echo "<pre>";print_r($post_tags);echo "</pre>";

Wenn du das Array ausgibst, erhältst Du folgende Daten:

Array
(
    [0] => WP_Term Object
        (
            [term_id] => 61
            [name] => Computer
            [slug] => computer
            [term_group] => 0
            [term_taxonomy_id] => 61
            [taxonomy] => post_tag
            [description] => 
            [parent] => 0
            [count] => 9
            [filter] => raw
        )

    [1] => WP_Term Object
        (
            [term_id] => 70
            [name] => Datenrettung
            [slug] => datenrettung
            [term_group] => 0
            [term_taxonomy_id] => 70
            [taxonomy] => post_tag
            [description] => 
            [parent] => 0
            [count] => 5
            [filter] => raw
        )

)

Wenn die Tags (Schlüsselwörter) in einem String aufgelistet werden sollen, nutzt du am besten eine foreach-Schleife.

if ($post_tags) {
	foreach( $post_tags as $tag ) {
		$tag_liste .= $tag->slug.", ";
    }
}

$tag_liste = rtrim($tag_liste, ", ");	// ENTFERNT das letze Komme und Leerzeichen!	
echo $tag_liste;

Die Tags stehen als Slug in einem String.

suchmaschinenoptimierung-seo, website

Möchtest Du sprechende Tags haben, musst Du statt $tag->slug den Namen wählen: $tag->name.

Suchmaschinenoptimierung SEO, Website

Plugins manuell im Code aktivieren & deaktivieren

Du bist ein „Wochenend-Programmierer“ wie ich und traust Dich raus in die Tiefen Deiner WordPress-Installation? Ich schreibe derzeit ein kleines Plugin, das mir spezielle administrative Aufgaben abnimmt. Eine dieser Aufgaben ist – Erkenne, ob ein Caching-Plugin (WP Rocket) aktiv ist und deaktiviere es in bestimmten WordPress-Beiträgen.

Klar, WP Rocket ist „mächtig“ und bedarf keiner externen „Sonderbehandlung“ – aber der Klapperstorch liefert mir ja auch nicht mein Wunsch-Baby auf den Balkon zu meiner Wunschzeit. Wie dem auch sei: Ich möchte ein bestimmtes WordPress-Plugin per PHP-Code deaktivieren und auch wieder aktivieren.

Wie erfahre/ermittele ich mit PHP, ob ein Plugin installiert wurde?

Bevor ein Plugin deaktiviert wird, wäre es schön zu wissen, ob es überhaupt in WordPress installiert wurde.

Das geschieht mit der Funktion array_key_exists($plugin, get_plugins() )

$plugin 		= "wp-rocket/wp-rocket.php"; // Pfad des Plugin

if(array_key_exists($plugin, get_plugins() ) ){ 	// Plugin installiert?
		$meldung = "<h2>".$plugin." installiert.";
}else{
	$meldung = "<h2><b>".$plugin."</b> NICHT installiert.</h2>";
}

Wie erfahre/ermittele ich mit PHP, ob ein Plugin aktiv ist?

Jetzt muss natürlich herausgefunden werden, ob ein bestimmtes, installiertes Plugin aktiviert ist. Die dazugehörige Funktion ist „is_plugin_active(‚wp-rocket/wp-rocket.php‘))“

In meinem Beispiel soll geschaut werden, ob das Plugin WP-Rocket aktiv ist.

if (is_plugin_active('wp-rocket/wp-rocket.php')) {
	echo "<hr>WP Rocket aktiv!<hr>";
}

In der Klammer trägst Du den Pfad und den Namen der PHP-Datei des betreffenden Plugins ein. Natürlich den Pfad ausgehend vom Plugin-Verzerichnis. Innerhalb der Abfrage kannst Du dann beliebigen Code einfügen, ausführen.

Wie deaktiviere ich ein WordPress-Plugin manuell im PHP-Code?

Die nützliche Funktion zum Deaktivieren von aktiven Wirdpress-Plugins nennt sich „deactivate_plugins“.

Zuerst legen wird den Pfad und den Dateinamen des gesuchten Plugins in eine Variable ab. In der Variabel darf kein „/“ am Anfang stehen, das führt unweigerlich zu einem Fehler.

  • Abfrage 1: Wurde das Plugin installiert?
  • Abfrage 2: Ist das Plugin aktiviert?

// Pfad des gewünschten Plugin
$plugin 	= "wp-rocket/wp-rocket.php";
$meldung 	= ""; 					

if(array_key_exists($plugin, get_plugins() )){ 	// Plugin installiert?
	if(is_plugin_active($plugin)) { 			// Plugin aktiviert?
		$meldung = "<h2>".$plugin." installiert und aktiv.";
		deactivate_plugins($plugin, true); 		// Plugin deaktivieren
	}else{
		$meldung = "<h2><b>".$plugin."</b> ist installiert, aber nicht aktiviert</h2>";
	}
}else{
	$meldung = "<h2><b>".$plugin."</b> ist NICHT installiert und NICHT aktiv.</h2>";
}

Styles

Im Customizer kannst Du verschiedene Style „deaktivieren“, ohne im Quellcode des Themes herumzupfuschen. Die #Namen der verwendeten Styles findest Du schnell mit dem Seiteninspektor im Browser heraus.

Klick im Browser auf die Funktionstaste F12 , wähle im Inspektor den Reiter „Inspektor“, klick links daneben auf das Pfeil-Symbol und wähle den Bereich, den du untersuchen möchtest. Im schwarzen Rechteck wird die dazugehörige Klasse angezeigt und unten der dazugehörige Quellcode abgebildet.

Beispiele

Rahmen um Beitragsbild-Thumb auf Archiv-Seiten

.mh-posts-list-thumb img {border: 2px solid silver;}

Platzhalter-Bild entfernen

Nicht zu jedem Beitrag ist stets ein passendes Beitrags-Bild zur Hand. WordPress stellt für diesen Fall ein Platzhalter-Bild zur Verfügung. Dieses lässt sich auf Archivseiten und der Startseite mit folgendem Code ausblenden.

.mh-image-placeholder { display: none; }

Kategorien Name aus Thumb entfernen

Bei einigen Themes wird der Name der Kategorie im Thumb des Beitragsbild fixiert. Der folgende Code entfernt diese Notiz.

.mh-image-caption { display: none; }<br>.mh-posts-list-caption { display: none; }

Meta-Angaben unter Titel ausblenden

Der folgende Code entfernt den gesamten Meta-Block unter dem Beitragstitel.

 .mh-meta { display: none; }

Wo Styles einbauen?

Die zusätzlichen CSS-Styles baust Du mit dem Customizer ein.