it-swarm.com.de

Super-Cache programmgesteuert leeren (mit ACF-Aktion)

Ich verwende regelmäßig erweiterte benutzerdefinierte Felder, um fantastische Backend-Oberflächen für meine Kunden zu erstellen (wie sicher viele von uns ...). ACF enthält ein Options-Add-On, mit dem eine oder mehrere globale Optionsseiten erstellt werden, über die Daten von überall abgerufen werden können. Auf der Seite "Optionen" kann der Kunde beispielsweise die 5 Beiträge auswählen, die auf einem Homepage-Karussell angezeigt werden sollen.

Ich habe Probleme mit dem Options-Add-On und dem Super-Cache. Standardmäßig hat das Speichern der Seite "Optionen" keine Auswirkung auf den Cache. So bleibt beispielsweise das Homepage-Karussell unverändert und der Client ist verwirrt.

Ich muss mich in die Seite "Optionen" einbinden, um den Cache beim Speichern der Seite "Optionen" programmgesteuert zu leeren, da ich meinen Clients normalerweise keinen Administratorzugriff gewähren oder sie nicht mit technischen Dingen wie Caches belästigen kann.

Der Autor von ACF sagt Folgendes: Es gibt eine Aktion namens acf/save_post, mit der alle veröffentlichten Felddaten gespeichert werden. Vielleicht könnten Sie diese Aktion verwenden, um sich in den Cache einzuklinken und ihn zu leeren. Mit dem Parameter $ post_id können Sie entscheiden, ob es sich um eine Optionsseite handelt oder nicht. Ich glaube, die Optionsseite wird durch '0' als post_id übergeben. Entweder das oder "Optionen".

Ist jemand in der Lage, beim Erstellen einer Aktion zu helfen, die den Super-Cache-Cache bei jedem Speichern der Seite "Optionen" vollständig löscht? Dies würde zweifellos vielen Menschen helfen!

acf/save_post info here: http://www.advancedcustomfields.com/resources/actions/acfsave_post/

Vielen Dank im Voraus.

2
Jacob

Diese Funktion löscht den WP Super-Cache beim Speichern der Seite ACF-Optionen. Genießen!

<?php

/* Additional Function to Prune the Cache if $post_id is '0' or 'options' */
function f711_clear_custom_cache($post_id) {

    // just execute if the $post_id has either of these Values. Skip on Autosave
    if ( ( $post_id == 0 || $post_id == 'options' ) && !defined( 'DOING_AUTOSAVE' ) ) {

        // Some Super Cache Stuff
        global $blog_cache_dir;

        // Execute the Super Cache clearing, taken from original wp_cache_post_edit.php
        if ( $wp_cache_object_cache ) {
            reset_oc_version();
        } else {
            // Clear the cache. Problem: Due to the combination of different Posts used for the Slider, we have to clear the global Cache. Could result in Performance Issues due to high Server Load while deleting and creating the cache again.
            Prune_super_cache( $blog_cache_dir, true );
            Prune_super_cache( get_supercache_dir(), true );
        }
    }

    return $post_id;

}

// Add the new Function to the 'acf/save_post' Hook. I Use Priority 1 in this case, to be sure to execute the Function
add_action('acf/save_post', 'f711_clear_custom_cache', 1);

?>
1
Jacob