PHP: Bild datumsbasiert anzeigen

Habe das folgende Snippet eben geschrieben und in ein WordPress Seiten-Template eingebaut; es zeigt ein abweichendes Teaser-Bild in einem Datumsintervall an (bspw. Adventszeit). Trifft die Bedingung nicht zu, wird das Standardbild angezeigt.

<?php
date_default_timezone_set('Europe/Berlin');
$heute = strtotime(date('Y-m-d'));
$start = strtotime(date('Y') . '-10-25');
$ende = strtotime(date('Y') . '-11-24');

if($heute >= $start && $heute <= $ende) { 
   echo '<img src="PFAD_ZUM_BILD-1" alt="...">'; //Kampagnenbild
}
else { 
   echo '<img src="PFAD_ZUM_BILD-2" alt="...">'; //Standardbild
}
?>

WordPress Head & Emoji bereinigen

Seltsamerweise nimmt mit jedem (kommenden) WordPress Update der Umfang im Head-Bereich zu. Davon profitiert weder mein Paradigma „Clean-Code“ noch die Seitenladezeit. Grund genug, sich wieder etwas Land zurückzuerobern. Das folgende Snippet einfach in die functions.php einfügen und schon hat man wieder einen etwas abgespeckten Head im HTML und gleichzeitig unterdrückt man auch die Versionsausgabe von WordPress.

// Removing some Kruppzeug from header
function head_bereinigen()
{
remove_action( 'wp_head', 'feed_links_extra', 3); 
remove_action( 'wp_head', 'feed_links', 2); 
remove_action( 'wp_head', 'rsd_link' );
remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'rss2_head', 'the_generator' );
remove_action( 'rss_head',  'the_generator' );
remove_action( 'rdf_header', 'the_generator' );
remove_action( 'atom_head', 'the_generator' );
remove_action( 'commentsrss2_head', 'the_generator' );
remove_action( 'opml_head', 'the_generator' );
remove_action( 'app_head',  'the_generator' );
remove_action( 'comments_atom_head', 'the_generator' );
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0);
}
add_action( 'after_setup_theme', 'head_bereinigen' );

// Removing Emoji code from header
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' ); 

Doppelte Title-Tags in WordPress

Hatte gerade in einem Child-Theme den Fall, das doppelte Title-Tags im Quellcode generiert wurden, obwohl in der header.php nur der einmalige Aufruf des Title-Tags mit der Standardfunktion (vgl. WordPress-Kodex) stand:

<?php wp_title('|', true, 'right'); ?>

Jetzt stellt sich heraus, das bereits seit WordPress 4.1. eine neue Funktion eingeführt wurde die automatisch einen Title (in besagtem Fall den zweiten) generiert. Diese Funktion wird in der functions.php wie folgt hinterlegt:

add_theme_support('title-tag');

In meinem Fall befand sich der Eintrag allerdings in der functions.php des Parent-Themes (‚Bootville‘) – und da sich Parent auf Child weitervererbt hatte sich ein zweiter Title automatisch generiert. Nachdem die Zeile gelöscht wurde gab es nur noch ein Title. Das wäre allerdings nur eine Notlösung, denn wenn das Parent-Theme aktualisiert wird, hat man das gleiche Problem wieder. Auch hierfür findet sich eine Lösung! In der functions.php des Child-Themes wird der Anweisung aus dem Parent-Theme wie folgt entfernt:


Ladezeit optimieren mit Expire & Deflate

Folgender Code in die .htaccess einfügen und der Pagespeed merklich schneller.

# BEGIN Expires-Headers

ExpiresActive On
ExpiresDefault "access plus 30 seconds"
ExpiresByType text/html "access plus 500 seconds"
ExpiresByType application/xhtml+xml "access plus 500 seconds"
ExpiresByType image/jpg "access plus 14 days"
ExpiresByType image/jpeg "access plus 14 days"
ExpiresByType image/png "access plus 14 days"
ExpiresByType image/gif "access plus 14 days"
ExpiresByType image/x-icon "access plus 14 days"
ExpiresByType application/x-shockwave-flash "access plus 14 days"
ExpiresByType text/css "access plus 14 days"
ExpiresByType text/javascript "access plus 14 days"
ExpiresByType application/x-javascript "access plus 14 days"

# END Expires-Headers

# Deflate Compression FileType

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-shockwave-flash

# End Deflate Compression FileType
# Deflate Compression MimeType


ExpiresActive on
ExpiresDefault "access plus 28 days"
SetOutputFilter DEFLATE


# End Deflate Compression MimeType

Yoast SEO Plugin (Markup) verstecken

Das beliebte Yoast SEO Plugin für WordPress ist ebenfalls beliebt als Einfallstor für Exploits. Aktuelle Exploits für die Yoast Version 3.0.7 sind noch nicht bekannt! Es schadet allerdings nicht in seine WordPress Security zu investieren und die functions.php um folgendes Snippet zu erweitern, um die Ausgabe der Versionsnummer von Yoast im Seitenquelltext zu verstecken.

// Removing yoast markup from header
add_action('get_header', 'start_ob');
add_action('wp_head', 'end_ob', 999);
function start_ob() {
ob_start('remove_yoast');
}
function end_ob() {
ob_end_flush();
}
function remove_yoast($output) {
if (defined('WPSEO_VERSION')) {
$targets = array(
'',
'',
'',
''
);
$output = str_ireplace($targets, '', $output);
$output = trim($output);
$output = preg_replace('/^[ \t]*[\r\n]+/m', '', $output);
}
return $output;
} 
jquery-logo

JQuery über Google CDN laden

Standardmäßig laden nahezu alle WordPress Standard-Themes eine eigene jQuery Bibliothek aus ihrem Verzeichnis. Das kann zwei kleine Nachteile mit sich bringen: Aktualität ist nicht immer gegeben und die Ladezeit ist minimal betroffen. Mit dem nachfolgenden Snippet in meiner functions.php setze ich das wie folgt um:

Weiterlesen

Manuell Revisionen per SQL löschen

In unregelmäßigen Abständen löschen ich in den Datenbanken meiner WordPress-Projekte die Revisionen von Artikeln und Seiten. Zwar lässt sich das automatische Anlegen von Revisionen schon über eine Option in der wp-config.php verbieten, der entsprechende Aufruf wäre:

define('WP_POST_REVISIONS', false );

In manchen Situationen ist man allerdings froh, doch ein gewisses Backup von Artikeln oder Seiten zu haben. Deshalb lösche ich manuell die Revisionen per SQL-Befehl in der Datenbank.
ls-sql-revisionen

Weiterlesen

Ersten Absatz des Artikels ausgeben

Kleines Code-Snippet das ich eben dafür verwendet habe, eine Kategorieseite zu generieren. Muss innerhalb des Loop-Wrappers vorkommen.

Erklärung zu den jeweiligen Zeilen:
1. Dazu wird der komplette Artikel eingelesen (get_the_content)
2. Etwaige vorkommende Bilder werden entfernt (preg_replace)
3. Kompletten Artikel als String in einen Array, jeder Absatz ist durch Paragraph (p) gekennzeichnet und da „abteilbar“ (explode)
4. Ich ersetze (str_replace) das Erste, öffnende Paragraph-Element mit einer CSS-Anweisung (margin-top:0px).
5. Ausgabe des ersten Absatzes sowie das abschließende Paragraph-Element

$content = apply_filters('the_content', get_the_content());
$content= preg_replace("/]+\>/i", "", $content); 
$content_array = explode("

", $content); $text = str_replace('

','

',$content_array[0]); echo $text . "

";

Custom Fields ausgeben

Abhängig davon wie ihr das Feld im Beitragseditor benennt (unten im Code-Snippet mit Tipp), ersetzt ihr diese Bezeichnung durch eure. Ausgabe funktioniert nur innerhalb des Loop-Wrappers.