Der fehlende Embed Privacy Shortcode

Manchmal kann ich mir meine Themes nicht aussuchen. Im Zuge der ganzen Google-Fonts-Abmahnungen kam ein Kunde auf mich zu und beauftragte mich damit, die externen Aufrufe auf seiner Website zu verhindern. Was bei Google Fonts dank OMGF und ähnlichen Plugins recht einfach geht, war bei der Google-Maps-Karte hier etwas schwieriger. Das Theme bringt einen eigenen Page Builder mit sich und wird nicht weiter entwickelt. Das Produkt ist auf Themeforest schon geschlossen. Normalerweise nutze ich Embed Privacy, aber das klappte hier nicht. Was also tun?

Der Page Builder des Themes hatte ein eigenes Modul für Google Maps, aber weder damit, noch mit dem iframe-Code ließ sich das Theme überreden, dass die Karte durch Embed Privacy geblockt wird. Praktischerweise bietet Embed Privacy aber eine Hilfe für Entwickler in der FAQ.

Für individuelle Lösungen könne folgender Code benutzt werden:

/**
 * Replace specific content with the Embed Privacy overlay of type 'google-maps'.
 * 
 * @param   string      $content The content to replace
 * @return  string The updated content
 */
function prefix_replace_content_with_overlay( $content ) {
    // check for Embed Privacy
    if ( ! class_exists( 'epiphyt\Embed_Privacy\Embed_Privacy' ) ) {
        return $content;
    }

    // get Embed Privacy instance
    $embed_privacy = epiphyt\Embed_Privacy\Embed_Privacy::get_instance();

    // check if provider is always active; if so, just return the content
    if ( ! $embed_privacy->is_always_active_provider( 'google-maps' ) ) {
        // replace the content with the overlay
        $content = $embed_privacy->get_output_template( 'Google Maps', 'google-maps', $content );
        // enqueue assets
        $embed_privacy->print_assets();
    }

    return $content;
}

Nun wollte ich nicht Stunden damit verbringen das Theme zu analysieren und zu schauen, wo ich diesen Code einbauen kann. Individuelle Module für einen eingestellten Page Builder bauen wäre ziemliche Zeitverschwendung. Ich brauchte aber trotzdem etwas, was im besten Fall kundentauglich ist und leicht von Redakteuren genutzt werden kann. Also vielleicht ein Shortcode?

Erstaunlicherweise bietet Embed Privacy so etwas nicht selbst an (Shortcodes sind ja auch ein überholtes Konzept in Zeiten von Blöcken), also habe ich den Code aus der FAQ kurz selbst in einen Shortcode gepackt:

<?php
/**
 * Plugin Name: Embed Privacy Helper
 * Description: Add shortcode for applying Embed Privacy.
 * Plugin URI:  https://torstenlandsiedel.de
 * Version:     1.0
 * Author:      Torsten Landsiedel
 * Author URI:  https://torstenlandsiedel.de
 * Licence:     GPL 2
 * License URI: http://opensource.org/licenses/GPL-2.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Replace specific content with the Embed Privacy overlay of type 'google-maps'.
 *
 * @param   string $content The content to replace.
 * @return  string The updated content.
 */
function tl_replace_content_with_overlay( $content ) {
	// Check for Embed Privacy.
	if ( ! class_exists( 'epiphyt\Embed_Privacy\Embed_Privacy' ) ) {
		return $content;
	}

	// Get Embed Privacy instance.
	$embed_privacy = epiphyt\Embed_Privacy\Embed_Privacy::get_instance();

	// Check if provider is always active; if so, just return the content.
	if ( ! $embed_privacy->is_always_active_provider( 'google-maps' ) ) {
		// Replace the content with the overlay.
		$content = $embed_privacy->get_output_template( 'Google Maps', 'google-maps', $content );
		// Enqueue assets.
		$embed_privacy->print_assets();
	}

	return $content;
}

/**
 * Add shortcode for applying Embed Privacy
 *
 * @param  Array  $atts    Parameter (unused).
 * @param  String $content Content between Shortcode like here: [embed_privacy]Content[/embed_privacy].
 * @return String          Content with applied Embed Privacy.
 */
function apply_embed_privacy_shortcode( $atts, $content = '' ) {
	return tl_replace_content_with_overlay( $content );
}
add_shortcode( 'embed_privacy', 'apply_embed_privacy_shortcode' );

Das funktionierte auf Anhieb und ohne Probleme. Als nächsten Schritt könnte dem Shortcode noch ein Parameter geschenkt werden, um nicht nur Google Maps, sondern auch alle anderen Embeds zu unterstützen. Aber da ich das für mein Projekt (noch) nicht benötigte, habe ich das nicht umgesetzt.

Vielleicht hat ja jemand Spaß daran mitzumachen dies einzubauen. Hier findet ihr das Github-Repo.

Der Entwickler, Matthias Kittsteiner, ist mit seinem Unternehmen Epiphyt als Plugin-Shop unterwegs und auch sonst an vielen Stellen in der WordPress-Community aktiv. Auf jeden Fall vielen Dank an ihn für dieses großartige Tool und die hilfreiche FAQ. Selten war eine Erweiterung so simpel und schnell zu machen.

Also falls jemand von euch ein ähnliches Problem hat und ein Shortcode helfen würde, dann bedient euch gerne! Habt ihr noch mehr Ideen für Erweiterungen dieses Plugins oder habt ihr auch mal Code in einen Shortcode gepackt, um ein Problem zu lösen, dann freue ich mich über eure Erfahrungen in den Kommentaren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert