お問い合わせ

Snow Monkeyの投稿一覧をキャッシュするカスタマイズ

  • URLをコピーしました!

Snow Monkeyの投稿一覧をキャッシュするカスタマイズをご紹介します。

ウィジェットエリアの最新の投稿やカスタム投稿の一覧、Snow Monkey Blockの投稿一覧もキャッシュできますので、便利です。

Snow Monkeyの投稿一覧をキャッシュするカスタマイズ

template-parts/widget/snow-monkey-posts.phpをキャッシュ付きにカスタマイズ

template-parts/widget/snow-monkey-posts.phpが投稿一覧を生成するテンプレートパーツになります。

以下のようにtransientを使ってキャッシュ付きにカスタマイズすることができます。

カスタマイズコード

<?php
/**
 * @package snow-monkey
 * @author inc2734
 * @license GPL-2.0+
 * @version 19.0.0-beta1
 */

use Framework\Helper;

$args = wp_parse_args(
	// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable
	$args,
	// phpcs:enable
	array(
		'_classname'               => null,
		'_entries_layout'          => 'rich-media',
		'_excerpt_length'          => null,
		'_force_sm_1col'           => false,
		'_infeed_ads'              => get_option( 'mwt-google-infeed-ads' ),
		'_item_thumbnail_size'     => 'medium_large',
		'_item_title_tag'          => 'h3',
		'_display_item_meta'       => null,
		'_display_item_terms'      => null,
		'_category_label_taxonomy' => null,
		'_link_text'               => null,
		'_link_url'                => null,
		'_posts_query'             => null,
		'_title'                   => null,
		'_vertical'                => false,
		'_widget_area_id'          => null,
		'_arrows'                  => false,
		'_dots'                    => true,
		'_interval'                => 0,
	)
);

if ( ! $args['_posts_query'] ) {
	return;
}

$transient_key = 'sm_snow-monkey-posts_html_' . md5(json_encode($args));

$res = get_transient($transient_key);
	
	if( !is_user_logged_in() && $res !== false){
		$html = $res;
		echo '<!--- CACHED ---->'.$html;
		return;
	} else{
		ob_start();
	}

$content_widget_areas = array(
	'front-page-top-widget-area',
	'front-page-bottom-widget-area',
	'posts-page-top-widget-area',
	'posts-page-bottom-widget-area',
	'archive-top-widget-area',
);

$classnames   = array();
$classnames[] = 'snow-monkey-posts';
if ( $args['_classname'] ) {
	$classnames[] = $args['_classname'];
}

$title_classname = 'c-widget__title';
if ( in_array( $args['_widget_area_id'], $content_widget_areas, true ) ) {
	$title_classname = 'snow-monkey-posts__title';
}
$title_classnames = array(
	$title_classname,
	$args['_classname'] . '__title',
);

$action_classnames = array(
	'snow-monkey-posts__action',
	$args['_classname'] . '__action',
);

$more_classnames = array(
	'snow-monkey-posts__more',
	$args['_classname'] . '__more',
);
?>

<div class="<?php echo esc_attr( join( ' ', $classnames ) ); ?>">
	<?php if ( $args['_title'] ) : ?>
		<h2 class="<?php echo esc_attr( join( ' ', $title_classnames ) ); ?>">
			<?php echo wp_kses_post( $args['_title'] ); ?>
		</h2>
	<?php endif; ?>

	<?php
	if ( ! empty( $args['_posts_query']->posts ) ) {
		$_post_type = get_post_type( $args['_posts_query']->posts[0] );
	} else {
		$_post_types = $args['_posts_query']->get( 'post_type' );
		$_post_type  = isset( $_post_types[0] ) ? $_post_types[0] : 'post';
	}

	$archive_view = get_theme_mod( $_post_type . '-archive-view' );
	$archive_view = $archive_view ? $archive_view : $_post_type;

	if ( is_null( $args['_display_item_meta'] ) ) {
		$args['_display_item_meta'] = 'post' === $archive_view ? true : false;
	}

	if ( is_null( $args['_display_item_terms'] ) ) {
		$args['_display_item_terms'] = 'post' === $archive_view ? true : false;
	}

	Helper::get_template_part(
		'template-parts/common/entries/entries',
		$archive_view,
		array(
			'_context'                 => $args['_context'],
			'_entries_layout'          => $args['_entries_layout'],
			'_excerpt_length'          => $args['_excerpt_length'],
			'_force_sm_1col'           => $args['_force_sm_1col'],
			'_infeed_ads'              => $args['_infeed_ads'],
			'_item_thumbnail_size'     => $args['_item_thumbnail_size'],
			'_item_title_tag'          => $args['_item_title_tag'],
			'_display_item_meta'       => $args['_display_item_meta'],
			'_display_item_terms'      => $args['_display_item_terms'],
			'_category_label_taxonomy' => $args['_category_label_taxonomy'],
			'_posts_query'             => $args['_posts_query'],
			'_arrows'                  => $args['_arrows'],
			'_dots'                    => $args['_dots'],
			'_interval'                => $args['_interval'],
		)
	);
	?>

	<?php if ( $args['_link_url'] && $args['_link_text'] ) : ?>
		<div class="<?php echo esc_attr( join( ' ', $action_classnames ) ); ?>">
			<a class="<?php echo esc_attr( join( ' ', $more_classnames ) ); ?>" href="<?php echo esc_url( $args['_link_url'] ); ?>">
				<?php echo esc_html( $args['_link_text'] ); ?>
			</a>
		</div>
	<?php endif; ?>
</div>
<?php
$html = ob_get_clean();

set_transient(
	$transient_key,
	$html,
	60 * 60 * 24 * 7  //秒で指定(サンプルは一日)
);

echo $html;

キャッシュの削除

function delete_transient_all(){
	global $wpdb;
	$db_prefix = $wpdb->prefix;
	$wpdb->query("delete from `".$db_prefix."options` where `option_name` like '%_transient_%'");	
}

function delete_transient_prefix($prefix){
	global $wpdb;
	$db_prefix = $wpdb->prefix;
	$wpdb->query("delete from `".$db_prefix."options` where `option_name` like '%_transient_".$prefix."_%'");	
}

add_action( 'save_post', 'wpdocs_delete_my_important_transient4' );
add_action( 'deleted_post', 'wpdocs_delete_my_important_transient4' );
function wpdocs_delete_my_important_transient4($post_id) {
	$prefix="sm_";
	delete_transient_prefix($prefix);
}

まとめ

SnowMonkeyで真面目にサイト運営している人もそれなりにいますが、やはりSnow Monkeyはオワコン感が漂っています。

今後はWeb制作でもSWELLArkheにスイッチしていく人が多いと思います。

他の人にもシェアしてね
  • URLをコピーしました!
  • URLをコピーしました!
コメントを閉じる

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

クリックできる目次