Wordpress

Wenn ich Web-Development für Backend-Lösungen betreibe, dann am liebsten mit PHP & Wordpress. Viele Snippets kann man öfters gebrauchten und dann sammle ich die jetzt hier einfach. Einerseits tue ich das für selbst, falls ich wieder mal ein Wordpress-Theme programmieren muss, andererseits hilft es vielleicht auch dir weiter.

Schnellere und bessere Debug-Ausgaben mit Javascript & console.log | Johannes Ulrich Gehrke

Schnellere und bessere Debug-Ausgaben mit Javascript & console.log

Console.log dauert immer so lange zu tippen - und sieht dann auch noch sehr rudimentär aus. Um im Javascript schneller mir Debug-Ausgaben mit Console.log her zaubern zu können, benutzt eine kurze Funktion d(); Diese Funktion ist nicht mehr als eine…

WordPress Dashboard entfernen für Abonnenten / Subscriber | Johannes Ulrich Gehrke

WordPress Dashboard entfernen für Abonnenten / Subscriber

In einer Website mit User-Registration wird das Wordpress oft nur genutzt um dem Abonnenten Zugriff auf Ihr Profil zu geben. Im Wordpress-Backend wird jedoch standardmäßig das Dashboard nach dem Login aufgerufen. Das Dashboard hat jedoch keinen Mehrwert für den Subscriber…

<?php

/**
 * Debug Helper, der eine HTML Vardump Ausgabe erzeugt
 * 
 * @param  mixed   $obj   Variable für den var_dump
 * @param  boolean $title Optional. Titel über der <pre> Ausgabe
 *
 * @return void
 */
function d( $obj, $title = false ){
	echo "<div class=\"debug\">";
	if( $title ) {
		echo "<h3 class=\"debug__title\">" . $title . "</h3>";
	}
	echo "<pre class=\"debug__print\">";
	var_dump( $obj );
	echo "</pre>";
	echo "</div>";
};


/* Beispiel-Benutzung */

d( $meine_var );

/* Oder */

d( $ausgabe_mit_titel, "Titel der Ausgabe" );

Bessere & schnellere Debug-Ausgaben mit var_dump

Debug-Ausgaben gehören einfach dazu - Ohne geht der Entwicklungsprozess nicht. An irgendeinem Punkt ist es immer notwendig sich einmal die ein oder andere Variable ausgeben zu lassen. Hier nutze ich PHPs var_dump(), aber dann bekommt man bei komplexen Objekten oder…

<?php
/**
 * Gibt ein Array zurück mit allen Parent Posts ohne Startseite
 *
 * Achtung: Die Funktion ist rekursiv und Pages
 * mit der ID '0' werden nicht ausgewertet
 *
 * @param  string|int  $id         Post-ID
 * @param  int         $max_depth  Optional. Maximale Crawl Tiefe
 *
 * @return array|bool  Die aktuelle Seite & Eltern Seiten als Array
 */
function p_get_breadcrump_posts( $id, $max_depth = 5 ){
	if( $max_depth == 0 ) { return false; };
	$post = get_post( $id );
	$post_data = [];
	if( intval( $post->post_parent ) > 0 ) {
		$post_data = p_get_breadcrump_posts( $post->post_parent, ( $max_depth - 1) );
	}
	$post_data[] = [
		'id'        => $post->ID,
		'title'     => $post->post_title,
		'parent'    => $post->post_parent,
		'permalink' => get_permalink( $post->ID ),
	];

	return $post_data;
};

Breadcrump für WordPress Seiten (Pages)

Breadcrumps für Wordpress sind Klassiker - Klassiker sind sie aber leider, weil es keine eigene Wordpress Funktion gibt um diese zu generieren. Ich habe hier ein Script geschrieben, mit dem man für Seiten (Pages) ein Breadcrump Array erstellen kann. Dieses…

Notwendige WordPress Plugins vom Theme managen lassen | Johannes Ulrich Gehrke

Notwendige WordPress Plugins vom Theme managen lassen

Das eigene Theme braucht oft Plugins - Viele Funktionen sind unnötig jedes mal selbst zu schreiben, oder man möchte auf einem Framework zugreifen, braucht komplexe Sonderfunktionen (z.B. Buddypress) oder möchte einfach die zusätzliche Eingabefelder vom OptionsTree haben. Es gibt die…

Google Captcha mit PHP als Spam-Schutz für Formulare nutzen | Johannes Ulrich Gehrke

Google Captcha mit PHP als Spam-Schutz für Formulare nutzen

Captchas bieten Hilfe gegen Spam - Als Seitenbetreiber kennt man es, wenn man ein Kontakt-Formular oder ähnliches hat, dass nach einer Weile Spam-Bots auf die Seite gelangen. Diese Bots tragen meist irgendwelche Daten in das Formular ein, probieren Sicherheitslücken zu…

jQuery(function() { /* onReady */
	var $ = jQuery; 

	// 16:9 ( Spielfilm-Format [ Hany, Laptop, etc auch] )
	$( '.video_player_wrapper iframe' ).lh_resize_videoplayer();
	
	// 21:9 ( Kino-Format )
	$( '.video_player_wrapper iframe' ).lh_resize_videoplayer( { 'width' : 21 } );
	
	// 4:3 ( Foto-Format )
	$( '.video_player_wrapper iframe' ).lh_resize_videoplayer( { 'width' : 4, 'height' : 3 } );
	
	// Finde Youtube-Player Iframes
	$( 'iframe[src^=\'https://www.youtube/\']' ).lh_resize_videoplayer();
	
});

Responsive Youtube Player für das Theme per jQuery

Videoplayer auf Website sind immer bisschen anstrengend - Sie sind einfach nicht so super einfach einbaubar wie Bilder. Der Youtube Player, den man per Embed-Code zum Beispiel bekommt liegt in einem Iframe. Diesen kann man mit max-width:100% zwar anpassen, dass…

<?php

/*
 *  SEITENNAVIGATION MIT SEITENZAHLEN
 *
 *  Gibt einen HTML Strink zurück mit Seitenzahlen als Links
 *  in einem DIV-Wrapper 
 */
function jg_pagination_numbered( $is_nofollow = false ) {
	global $wp_query;

	/*
	 *  TEMPLATES
	 */
	$tpl_item = "
		<a href=\"%URL%\" class=\"f-pagination__page-item %ACTIVE%\" %NOFOLLOW% >%NUMBER%</a>
	 
	";

	$nofollow     = " rel=\"nofollow\" ";
	$class_active = " active ";

	/*
	 *  GET DATA
	 */
	$max_pages      = $wp_query->max_num_pages;
	// Aktuelle Seite: Seite 0 = Seite 1
	$current_page   = ( $wp_query->query_vars['paged'] ) ? $wp_query->query_vars['paged'] : 1;
	
	// Schreibe alle Seiten auf ein Array
	$items = [];
	for ( $i=1; $i <= $max_pages ; $i++ ) { 
		$items[$i] = [
			'url'        => get_pagenum_link( $i, false ),
			'is_current' => ( $i == $current_page ) ? true : false,
		];
	};
	
	/*
	 *  BUILD HTML
	 */
	$items_html = "";
	foreach ( $items as $key => $item) {
		// Alle Items zu einem Item-HMTL-String zusammenfügen	
		$tpl_data = [
			'%NUMBER%'   => $key,
			'%URL%'      => $item['url'],
			'%ACTIVE%'   => ( $item['is_current'] ) ? " active " : "",
			'%NOFOLLOW%' => ( $is_nofollow ) ? $class_active : "",
		];
		$items_html .= strtr( $tpl_item, $tpl_data );
	};
	
	
	return $items_html;
	
};

Seitenzahlen-Navigation für WordPress

Für Besucher und für SEO ist es oft wichtig eine Seitenzahlen-Navigation zu haben. Damit ist es möglich über die Pagination direkt auf die Zielseite zu kommen. Und es hält für Google die Seitenhierarchie flach. Wordpress ist traditionell eine Plattform zum…

Datenbank Perfomance für WordPress erhöhen mit mySQL Cache | Johannes Ulrich Gehrke

Datenbank Perfomance für WordPress erhöhen mit mySQL Cache

Die meisten Web-Server operieren bereits mit dem sehr perfomanten PHP7 und aktiviertem Objekt-Cache - Dadurch wird immer öfter die Datenbank auf dem Server zum so genannten Bottleneck (Flaschenhals) für die Perfomance. Hier kann es helfen zu prüfen ob der mySQL…

<?php

/*
 *  REGISTRIERT NEUE NUTZER ROLLEN 
 *  FÜR KUNDEN / CLIENTS
 * 
 *  Client Master > Kann alles vom Editor + Nutzer, Menüs, Widgets & Customzier bearbeiten
 *  Client User   > Kann alles vom Editor + Menüs & Widgets bearbeiten
 * 
 *  Clients können nichts updaten oder selbst installieren
 * 
 */
function user_role_clients() {
	
	// *** ROLLE: CLIENT MASTER USER ***
	// Prüfen ob "Client Master User" bereits existiert
	if ( !get_role( 'client_master_user' ) ) {
		$user_capabilities = get_role( 'editor' )->capabilities; // Basis ist die 'Editor'-Rolle
		$user_capabilities = array_merge(
			$user_capabilities,
			// Zusätzliche Optionen hier hinzufügen
			array(
				// Client Master kann jetzt Nutzer bearbeiten
				'list_users'	=> true,
				'create_users'  => true,
				'edit_users'	=> true,
				'promote_users' => true,
				'delete_users'  => true,
				'remove_users'  => true,
				
				// Client Master kann Menüs & Widgets bearbeiten
				'edit_theme_options' => true,
				
				// Client Master kann in das Theme>Custumize Menü gehen
				'customize' => true,
			)
		);
		add_role( 'client_master_user', 'Client Master-User', $user_capabilities ); // Nutzer-Rolle hinzufügen
	}
	
	// *** ROLLE: CLIENT USER ***
	// Prüfen ob "Client  User" bereits existiert
	if ( !get_role( 'client_user' ) ) {
		$user_capabilities = get_role( 'editor' )->capabilities; // Basis ist die 'Editor'-Rolle
		$user_capabilities = array_merge(
			$user_capabilities,
			// Zusätzliche Optionen hier hinzufügen
			array(
				// Client User kann Menüs & Widgets bearbeiten
				'edit_theme_options' => true,
			)
		);
		add_role( 'client_user', 'Client User', $user_capabilities ); // Nutzer-Rolle hinzufügen
	}
	
}
	

add_action( 'admin_init', 'user_role_clients' );

Neue Nutzerrollen für Kunden im WordPress anlegen

Wenn man eine Wordpress-Seite einem Kunden übergibt, muss man für diesen meistens auch einen Nutzer anlegen. Es kann sinnvoll sein dem Client eine neue spezielle Kunden-Rolle zu zuweisen. Der Kunde bekommt natürlich immer einen Account zu seiner eigenen Wordpress-Seite. Jeder…

1 2