Snow Monkeyの投稿一覧をキャッシュするカスタマイズ
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制作でもSWELLかArkheにスイッチしていく人が多いと思います。
SWELLはブログ以外のサイトには不向き?SWELLを使ってみた課題 ブログ向けのテーマであるSWELLをスクレイピングしたデータから自動更新するタイプのサイトで使いました。 この記事ではその時に必要だったSWELLのカスタマイズについて…
ArkheをWeb制作に使った時の課題が見えてきた Arkheを使ってWeb制作する時は、課金した方がいいのでしょうか? Arkheは有料ライセンスを使うとSWELLに近い機能が使えるようになります。 有料ライセンスというのは、A…
Snow Monkey V19へのアップデートは注意!デザインが崩れる Snow MonkeyのV19へのアップデートが配信されています。 Snow Monkey V19はかなり大きな変更が入っていますので、何も考えずにアップデートするのは止めましょう。 私の…
コメントを閉じる
コメント