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.

<?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…

<?php
//
// FUNCTIONS
//

$post_id    = get_the_id();
$blog_title = get_bloginfo( 'name' );

$thumbnail_id        = get_post_thumbnail_id( $post_id );
$thumbnail_html      = lh_attached_thumbnail( $thumbnail_id, $post_id );

//
// TEMPLATE
//
?>
	<article>
		<div class="uk-grid post f-post f-teaser">
			<div class="uk-width-medium-2-3 f-post__media f-teaser__media">
				<?php echo $thumbnail_html; ?>
			</div>
			<div class="uk-width-medium-1-3 f-post__media f-teaser__media">
			 	<h2>
			 		<a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute();?> | <?php echo $blog_title; ?>">
			 			<?php the_title(); ?>
			 		</a>
			 	</h2>
			</div>
		</div>
	</article>
 	

Übersichtliche Struktur für WordPress-PHP Code

Ordnung in Template- & Funktions-Dateien zu halten ist bei größeren Projekten schwer und bei längeren Projekt enorm wichtig. Um Ordnung zu halten trenne ich meine Dateien in 'Daten' & 'Template'. Oft wird man mit fremden Templates oder eigenen Templates aus…

 function filter_plugin_deactivate_updates( $value ) {
    unset( $value->response['meta-box/meta-box.php'] );
    unset( $value->response['meta-box-group/meta-box-group.php'] );

    return $value;
}
add_filter( 'site_transient_update_plugins', 'filter_plugin_deactivate_updates' );

Updates von spezifischen Plugins in WordPress unterbinden

Updates sind eigentlich gute Sachen und sollten immer gemacht werden; allein der Sicherheit wegen. Manchmal kann es aber nötig sein updates zu verhindern, falls ein Plugin-Update nicht mit dem aktuellem System kompatibel ist. Mit diesem Code kann man unterdrücken dass…

/*
 *  GIBT POSTS ALS ARRAY ZURÜCK
 * 
 *  $loop_args -> Ein Array mit den standard Argmuenten von Wordpress
 * 
 *  return -> Ein Array mit den Posts
 */

function get_posts_as_array( $loop_args = array() ) {
	// Ausgabe Array
	$posts_output = array();	
	
	
	// LOOP ARGUMENTS	
	$defaults = array( 
		'category_name'  => 'Allgemein'
		'posts_per_page' => 50, 
	);
	$post_loop_args = wp_parse_args( $loop_args, $defaults );
	
	
	// EVENT LOOP
	$post_loop = new WP_Query( $post_loop_args );
	while ( $post_loop->have_posts() ) : $post_loop->the_post();
		$single_post_id = get_the_id();
		$single_post    = array( // Event Daten
			'id'       => $single_post_id,
			'title'    => get_the_title( $single_post_id ),
			'content'  => get_the_content( $single_post_id ),
			'thumb_id' => get_post_thumbnail_id( $single_post_id ),
			'date'     => get_the_date( 'd. m. Y', $single_post_id ),
			'meta'     => array(
				// Sub-Array zum Post sind auch möglich um z.b.
				// eigene Optionen aus 'Custom Fields' oder Metaboxen speichern
				// 'EIGENE_OPTIONEN' => get_custom_field(),
			),
		);
		
		// aktuellen Post an Array anfügen
		array_push( $posts_output, $single_post );
		
	endwhile;
	
	// POST-ARRAY MANIPULATION
	// hier könnte noch Code eingefügt werden um das Array
	// Nachträglich zu verändertn, z.B. anders sortieren
	// asort( $posts_output );
	
	
	// RETURN
	return $posts_output;
};

WordPress Posts als Array speichern

Der Wordpress Loop ist aus seiner Historie heraus super, um klassische Blog & News Beiträge zu generieren. Manchmal möchte man seine Template PHP Files aber nicht mit Loops zu kleistern, oder mag einfach ordentlichen Code haben. Dann kann es nützlich…

1 2