Kategorie: WordPress-Snippets

Bedingtes Anzeigen und Verstecken von Customizer-Controls via JavaScript

Bei Nutzung des Partial Refresh im Customizer, wodurch nach einer Änderung nur ein Teil der Vorschau nachgeladen wird, funktioniert für diese Einstellungen die Angabe von active_callback nicht mehr – darüber kann per PHP zum Beispiel angegeben werden, dass eine Customizer-Control nur angezeigt wird, wenn eine andere einen bestimmten Wert hat. In diesem Fall muss die bedingte Anzeige über JavaScript gesteuert werden. Bedingtes Anzeigen und Verstecken von Customizer-Controls via JavaScript weiterlesen

Eigenschaften einer bestehenden Customizer-Control ändern

Hier zeige ich euch kurz, wie ihr die Eigenschaften von bestehenden Customizer-Controls ändern könnt – hilfreich für einen kleinen Denkanstoß war dabei ein Gist von Marcio Duarte.

In meinem konkreten Fall wollte ich der vom Core erzeugten Header-Image-Control einen active_callback mitgeben, um sie nur anzuzeigen, wenn der Nutzer auf einer statischen Startseite ist. Um das zu erreichen, braucht es nur eine Zeile Code:

/**
 * Set active callback for the header image control.
 */
$wp_customize->get_control( 'header_image' )->active_callback = 'slug_is_static_front_page';

Entsprechend lassen sich auch die anderen Eigenschaften anpassen – ein paar Beispiele gibt es im oben verlinkten Gist. Der Vollständigkeit halber hier noch die Callback-Funktion:

/**
 * Check if we are on a static front page.
 *
 * @param WP_Customize_Control $control Control object.
 *
 * @return bool
 */
function slug_is_static_front_page( $control ) {
	/**
	 * Return true if is static front page.
	 */
	if ( is_front_page() && is_page() ) {
		return true;
	} else {
		return false;
	}
}

WordPress nachträglich von utf8 auf utf8mb4 umstellen

Beim Update auf WordPress 4.2 wurde der Zeichensatz der Datenbank von utf8 auf utf8mb4 umgestellt (zum Beispiel notwendig für die volle Unterstützung von Emojis), sofern ein paar Voraussetzungen erfüllt waren. Hier zeige ich, wie ihr diese Umstellung manuell vornehmen könnt, wenn ihr bei dem 4.2-Update die Anforderungen noch nicht erfüllt habt. WordPress nachträglich von utf8 auf utf8mb4 umstellen weiterlesen

WordPress-Multisite mit einer Mischung aus Subdomains und Unterverzeichnissen

Bei einer Multisite entscheidet ihr euch ganz am Anfang dafür, ob ihr sie mit Subdomains oder Unterverzeichnissen betreiben möchtet – ein Mix aus beiden Varianten ist nicht ohne Anpassungen möglich. Hier stelle ich euch vor, wie ihr vorgehen müsst, um eine Multisite mit Subdomain- und Unterverzeichnis-Sites zu betreiben. WordPress-Multisite mit einer Mischung aus Subdomains und Unterverzeichnissen weiterlesen

Admin-Notice bei verfügbarem Update von bestimmtem Plugin anzeigen

Für die durch das Plugin German Market erstellten Rechnungen meines Shops nutze ich einen Font den ich nach jedem Plugin-Update erneut integrieren muss, da er nicht standardmäßig in dem Plugin eingebunden ist. Damit ich das nicht (mehr) vergesse, lasse ich mir eine Admin-Notice anzeigen, sobald ein Update für das Plugin verfügbar ist. Das ist nicht besonders schwer und schnell umgesetzt, der komplette Code sieht so aus:

/**
 * Display admin notice so I remember uploading the Clavo font after updating German Market
 */
function fbn_german_market_typography_notice() {
    $update_plugins_transient = get_site_transient( 'update_plugins' );
    if ( $update_plugins_transient->response['woocommerce-german-market/WooCommerce-German-Market.php'] ) {
        add_action( 'all_admin_notices', function () { ?>
            <div class="notice notice-warning">
                <p><strong>Nach dem »German Market«-Update den Clavo-Font für Rechnungen wieder hochladen!</strong></p>
            </div>
        <?php } );
    }
}

add_action( 'admin_init', 'fbn_german_market_typography_notice' );

Ich übergebe an den admin_init-Hook die Funktion fbn_german_market_typography_notice(). Darin wird zunächst der Wert des Site-Transients update_plugins in einer Variable gespeichert – in diesem Transient sind Infos zu Plugin-Updates gespeichert. Wenn nun $update_plugins_transient->response['woocommerce-german-market/WooCommerce-German-Market.php'] vorhanden ist, dann ist ein Update für das Plugin verfügbar.

In diesem Fall wird eine Admin-Notice ausgegeben (ich nutze hier all_admin_notices, damit es in einer Multisite nicht nur im Netzwerk-Admin angezeigt wird) die mich hoffentlich zukünftig daran erinnert, den Font für die Rechnungs-PDF wieder hochzuladen … 🙂

Für andere Plugins ist der Array-Schlüssel natürlich ein anderer. Ihr könnt euch einfach per var_dump( $update_plugins_transient ); den Inhalt des Transients ausgeben lassen, um den richtigen Schlüssel zu finden.

PS: Mehr zu Admin-Notices gibt es im Beitrag »Admin Notices in Plugin UIs« von Caspar Hübinger.

robots.txt für bestimmte Sites einer Multisite anpassen

Die robots.txt einer WordPress-Site wird normalerweise dynamisch generiert. Um die in einer normalen Einzelinstallation zu überschreiben, kann einfach eine statische robots.txt erstellt und auf den Server geladen werden – in einer Multisite würde diese Datei dann aber für alle Seiten gelten, was nicht unbedingt gewünscht ist. Dieser Artikel zeigt euch, wie ihr die robots.txt für einzelne Sites der Multiste anpassen könnt. robots.txt für bestimmte Sites einer Multisite anpassen weiterlesen

Unabhängig von Steuern immer denselben Endpreis in WooCommerce

Bei meinem kleinen Online-Shop muss ich im Endpreis für Käufer aus der EU den jeweils in ihrem Land gültigen Mehrwertsteuersatz ausweisen. Bei Käufern aus den USA beispielsweise wird aber keine Mehrwertsteuer ausgewiesen. Wenn ich nun in WooCommerce einen Preis von 15 Euro bestimme und einstelle, dass ich Preise inklusive Steuern angebe, dann ist das Standardverhalten wie folgt:

Kunden aus einem Land, für das ein Steuersatz hinterlegt wurde, zahlen 15 Euro inklusive ihres jeweilgen Mehrwertsteuersatzes. Kunden aus Ländern, für die kein Steuersatz hinterlegt wurde, zahlen weniger. Hier wird der Preis glaube ich um den Steuersatz des Shop-Basislands verringert (da bin ich mir aber nicht ganz sicher). Das gewünschte Verhalten ist aber, dass auch diese Kunden 15 Euro bezahlen, nur halt ohne Mehrwertsteuer.

Im WooCommerce-Wiki auf GitHub gibt es dazu eine ziemlich einfache Lösung. Ihr müsst lediglich folgende Zeile in euer Theme oder ein Plugin schreiben:

add_filter( 'woocommerce_adjust_non_base_location_prices', '__return_false' );