w3 Gesamtcache und post__not_in

Ich benutze eine modifizierte Version des Plugin für die letzten Posts zusammen mit WP Total Cache. Ich benutze post__not_in, da ich den aktuellen Post nicht mehr anzeigen möchte. Es funktioniert gut, aber wenn Objekt-Cache aktiviert ist, funktioniert post__not_in bei einigen Posts nicht.

Hier ist mein Code:

 'nothing_recent_posts', 'description' => __( "Customized version of Recent Posts. You can choose what to display and add custom classes.") ); parent::__construct('nothing-recent-posts', __('Customized Recent Posts'), $widget_ops); $this->alt_option_name = 'nothing_recent_entries'; add_action( 'save_post', array($this, 'flush_widget_cache') ); add_action( 'deleted_post', array($this, 'flush_widget_cache') ); add_action( 'switch_theme', array($this, 'flush_widget_cache') ); } function widget($args, $instance) { $cache = wp_cache_get('nothing_recent_posts', 'widget'); if ( !is_array($cache) ) $cache = array(); if ( ! isset( $args['widget_id'] ) ) $args['widget_id'] = $this->id; if ( isset( $cache[ $args['widget_id'] ] ) ) { echo $cache[ $args['widget_id'] ]; return; } ob_start(); extract($args); $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts' ); $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 10; if ( ! $number ) $number = 10; $show_title = isset( $instance['show_title'] ) ? $instance['show_title'] : false; $show_date = isset( $instance['show_date'] ) ? $instance['show_date'] : false; $show_img = isset( $instance['show_img'] ) ? $instance['show_img'] : false; $custom_class = ( ! empty( $instance['custom_class'] ) ) ? $instance['custom_class'] : ' '; $query_by_cat = isset( $instance['query_by_cat'] ) ? $instance['query_by_cat'] : false; if( $query_by_cat ){ $current_category = wp_get_post_categories( get_the_id() ); $r = new WP_Query( apply_filters( 'widget_posts_args', array( 'category__in' => $current_category, 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true, 'post__not_in' => array(get_the_id()) ) ) ); }else{ $r = new WP_Query( apply_filters( 'widget_posts_args', array( 'posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true, 'post__not_in' => array(get_the_id()) ) ) ); } if ($r->have_posts()) : ?>   have_posts() ) : $r->the_post(); ?> <article class="hentry "> <a href="https://wordpress.stackexchange.com/questions/159756/w3-total-cache-and-post-not-in/" rel="bookmark" title='Den Beitrag "" ansehen'>  

flush_widget_cache(); $alloptions = wp_cache_get( 'alloptions', 'options' ); if ( isset($alloptions['nothing_recent_entries']) ) delete_option('nothing_recent_entries'); return $instance; } function flush_widget_cache() { wp_cache_delete('nothing_recent_posts', 'widget'); } function form( $instance ) { $title = isset( $instance['title'] ) ? esc_attr( $instance['title'] ) : ''; $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; $show_title = isset( $instance['show_title'] ) ? (bool) $instance['show_title'] : true; $show_date = isset( $instance['show_date'] ) ? (bool) $instance['show_date'] : false; $show_img = isset( $instance['show_img'] ) ? (bool) $instance['show_img'] : false; $custom_class = isset( $instance['custom_class'] ) ? esc_attr( $instance['custom_class'] ) : ''; $query_by_cat = isset( $instance['query_by_cat'] ) ? (bool) $instance['query_by_cat'] : false; ?>

<label for="get_field_id( 'title' ); ?>"> <input class="widefat" id="get_field_id( 'title' ); ?>" name="get_field_name( 'title' ); ?>" type="text" value="" />

<label for="get_field_id( 'number' ); ?>"> <input id="get_field_id( 'number' ); ?>" name="get_field_name( 'number' ); ?>" type="text" value="" size="3" />

<input class="checkbox" type="checkbox" id="get_field_id( 'show_title' ); ?>" name="get_field_name( 'show_title' ); ?>" /> <label for="get_field_id( 'show_title' ); ?>">

<input class="checkbox" type="checkbox" id="get_field_id( 'show_date' ); ?>" name="get_field_name( 'show_date' ); ?>" /> <label for="get_field_id( 'show_date' ); ?>">

<input class="checkbox" type="checkbox" id="get_field_id( 'show_img' ); ?>" name="get_field_name( 'show_img' ); ?>" /> <label for="get_field_id( 'show_img' ); ?>">

<label for="get_field_id( 'custom_class' ); ?>"> <input class="widefat" id="get_field_id( 'custom_class' ); ?>" name="get_field_name( 'custom_class' ); ?>" type="text" value="" />

<input class="checkbox" type="checkbox" id="get_field_id( 'query_by_cat' ); ?>" name="get_field_name( 'query_by_cat' ); ?>" /> <label for="get_field_id( 'query_by_cat' ); ?>">

<?php } }

Solutions Collecting From Web of "w3 Gesamtcache und post__not_in"

Wenn Sie dem Code des letzten Seiten-Widgets gefolgt sind, kann das, was Sie erreichen möchten, nicht so naiv ausgeführt werden, wie Sie es versuchen. Das Widget für die Zwischenspeicherung von letzten Posts basiert auf der Annahme, dass überall dieselbe Ausgabe angezeigt wird. Deshalb kann der Cache auf jeder Seite berechnet und auf einer anderen Seite verwendet werden. Diese Annahme trifft jedoch nicht auf Ihren Fall zu, da Sie eine andere Ausgabe wünschen einige Seiten.

Der einfachste Weg, um es zu umgehen, ist einen anderen Cache-Schlüssel für jeden Beitrag wie recent-posts- {Post-ID} zu haben.

Haben Sie sichergestellt, dass in Ihren Cache-Schlüsseln keine Kollisionen auftreten können? dh sicherstellen, dass der post-spezifische Hash bei der Schlüsselbenennung verwendet wird?