Snow Monkey v8 をリリースしました

メジャーアップデートである v8 をリリースします。メジャーアップデートは後方互換性に問題がでる可能性があるため、テスト環境で動作確認をしてから本番環境に適用することをおすすめします。

特に、子テーマや My Snow Monkey でテンプレートの上書き・独自の Snow Monkey 専用プラグインの開発をおこなっている場合はなんらか影響がでる可能性がありますので、事前のテストを強く推奨します。

v8 の概要

機能追加

  • WordPress 5.3 対応
  • ヘッダーコンテンツでのショートコードのサポート
  • ブログカードカスタマイズ用のフックを追加
  • Snow Monkey オリジナルウィジェットカスタマイズ用のフックを追加

変更(後方互換性的に影響がでる可能性がある点)

  • クエリテンプレートの読み込み処理をリファクタリング
  • テンプレート読み込み関連フックの挙動変更
  • フッター固定ナビゲーションの挙動を変更
  • 子テーマ利用時以外もテンプレート上書き関連のデバッグ警告がでるように変更
  • 追尾サイドバーの CSS 化
  • 各ウィジェットブロックのスタイルを調整
  • パンくずナビの HTML 構造を変更(全体を .p-breadcrumbs-wrapper で囲む)
  • フック名の変更
  • 左右回り込み(.alignright.alignleft)の最大幅指定を追加

不具合の修正

  • エディターに URL を貼りつけたとき、ブログカードではなく URL が表示されてしまう不具合を修正
  • 「追加 CSS」のエディター反映機能が at-rule の入れ子に対応していない不具合を修正
  • 「Snow Monkey: 最近の投稿」ウィジェットにおいて id 属性の重複が発生する不具合を修正
  • PHP 5.6 で Strict standards: Static function の警告がでる不具合を修正
  • オーバレイウィジェットエリア内のリンクがクリックできない場合がある不具合を修正
  • macOS Catalina + Chrome でフォントが明朝体になることがある不具合の対応
  • タグアーカイブ・年別アーカイブに1件目の記事のアイキャッチ画像がページヘッダーとして表示されることがある不具合を修正

WordPress 5.3 対応

Snow Monkey v8 未満の場合はブロックエディター上でスタイルの崩れが発生する可能性があります。WordPress 5.3 以上をお使いの場合は、Snow Monkey v8 以降の利用を推奨します。

ヘッダーコンテンツでのショートコードのサポート

これまでヘッダーコンテンツでショートコードを使うためにはカスタマイズが必要でしたが、v8 からはこのカスタマイズは不要になります。もし下記のコードを使っている場合は削除推奨です。

クエリテンプレートの読み込み処理をリファクタリング

WordPress にアクセスがあったときに最初に呼びだされるテンプレート(= クエリテンプレート。singular.phparchive.php など)の読み込み処理を最適化しました。

この変更の影響で、snow_monkey_controller の第2引数が廃止されましたので、使用していた方はご注意ください。

テンプレート読み込み関連フックの挙動変更

snow_monkey_get_template_part-<slug>snow_monkey_get_template_part-<slug>-<name> アクションフックで定義したテンプレートの内容も、snow_monkey_template_part_render フィルターフックでカスタマイズができるように変更しました。

フッター固定ナビゲーションの挙動を変更

フッター固定ナビゲーションを利用している場合、これまでは最下部までスクロールすると自動的に body に下余白が追加され、フッター固定ナビゲーションに隠れることなく最下部のコンテンツも閲覧ができるようにしていました。

ただ、これだと都度下余白を追加するかどうかの計算が必要になり、描画速度に若干の影響があることが考えられます。用途的にそのデメリットを受け入れる必要はないかなと判断し、最下部までスクロールするとフッター固定ナビゲーションが消えるように挙動を変更しました。

子テーマ利用時以外もテンプレート上書き関連のデバッグ警告がでるように変更

下記の場合に警告がでます。

  • 呼びだそうとしているファイルが存在しないとき
  • テンプレートを古い配置で上書きしているとき
  • 呼びだしているファイルのバージョンが古いとき

追尾サイドバーの CSS 化

これまで JavaScript でおこなっていた追尾サイドバーの位置制御を CSS 化しました。これにより、これまで若干発生することがあったカクつきがなめらかに、軽くなりました。

IE11は position: sticky に対応していないため追尾しなくなりました。また、追尾サイドバーの先祖要素に overflow: hidden な要素がある場合も追尾しなくなりますので、カスタマイズの際はご注意ください。

ブログカードカスタマイズ用のフックを追加

snow_monkey_oembed_blog_card_block_editor_template

エディター上に表示されるブログカードの HTML をカスタマイズできます。

/**
 * @param string $template
 * @param string $url
 * @return string
 */
add_filter(
	'snow_monkey_oembed_blog_card_block_editor_template',
	function( $template, $url ) {
		return $template;
	},
	10,
	2
);

snow_monkey_oembed_blog_card_loading_template

ブログカードは、表示のたびに参照先ページの情報を取得すると速度がおそくなったり参照先ページに負荷をかけることになるため、一度取得した情報を一定時間キャッシュするようになっています。

キャッシュの有効期限が切れた場合に表示されるブログカードの HTML をカスタマイズできます。

※ただし、.js-wp-oembed-blog-card.js-wp-oembed-blog-card__link がないと正しく動作しない場合があるので注意してください。

/**
 * @param string $template
 * @param string $url
 * @return string
 */
add_filter(
	'snow_monkey_oembed_blog_card_loading_template',
	function( $template, $url ) {
		ob_start();
		?>
		<div class="js-wp-oembed-blog-card">
			<a class="js-wp-oembed-blog-card__link" href="%1$s" target="%2$s">%1$s</a>
		</div>
		<?php
		return ob_get_clean();
	},
	10,
	2
);

snow_monkey_oembed_blog_card_url_template

参照先ページから正しく情報が取得できなかった場合に表示されるブログカードの HTML をカスタマイズできます。

/**
 * @param string $template
 * @param string $url
 * @return string
 */
add_filter(
	'snow_monkey_oembed_blog_card_url_template',
	function( $template, $url ) {
		return $template;
	},
	10,
	2
);

snow_monkey_oembed_blog_card_template

ブログカードの HTML をカスタマイズできます。

/**
 * @param string $template
 * @param array $cache
 * @return string
 */
add_filter(
	'snow_monkey_oembed_blog_card_template',
	function( $template, $cache ) {
		return $template;
	},
	10,
	2
);

Snow Monkey オリジナルウィジェットカスタマイズ用のフックを追加

Snow Monkey に搭載されている「WPAW: xxxxx」のウィジェットのカスタマイズをおこなうためのフックを追加しました。

snow_monkey_wp_awesome_widgets_view_hierarchy

ウィジェットのテンプレートを格納するテンプレートルートを追加します。ウィジェットのテンプレートを読み込むときに、$hierarchy を上から順に探索していき、見つかったテンプレートが使用されます。

/**
 * @param array $hierarchy
 * @param string $slug e.g. slider, recent-posts, etc...
 * @param null $name
 * @param array $vars
 */
add_filter(
	'snow_monkey_wp_awesome_widgets_view_hierarchy',
	function( $hierarchy, $slug, $name, $vars ) {
		return array_merge(
			[ __DIR__ . '/templates' ],
			$hierarchy
		);
	},
	10,
	4
);

snow_monkey_wp_awesome_widgets_view_args

/**
 * @param array $args
 *  @var string $slug
 *  @var string $name
 *  @var array $vars
 * @param array
 */
add_filter(
	'snow_monkey_wp_awesome_widgets_view_args',
	function( $args ) {
		return $args;
	}
);

snow_monkey_wp_awesome_widgets_view_<slug>

ウィジェットの HTML を関数内で定義できます。

/**
 * @param string $name
 * @param array $vars
 */
add_action(
	'snow_monkey_wp_awesome_widgets_view_ <slug>',
	function( $name, $vars ) {
		?>
		HTML
		<?php
	},
	10,
	2
);

snow_monkey_wp_awesome_widgets_view_<slug>-<name>

/**
 * @param array $vars
 */
add_action(
	'snow_monkey_wp_awesome_widgets_view_ <slug>-<name>',
	function( $vars ) {
		?>
		HTML
		<?php
	}
);

snow_monkey_wp_awesome_widgets_view_render

ウィジェットの HTML をカスタマイズできます。

/**
 * @param string $html
 * @param string $slug
 * @param string $name
 * @param array $vars
 * @return string
 */
add_filter(
	'snow_monkey_wp_awesome_widgets_view_render',
	function( $html, $slug, $name, $vars ) {
		return $html;
	},
	10,
	4
);

フック名の変更

フックの命名規則を統一させるために、下記のフック名についてリネームをおこないました。古い名称のフックを使用している場合は、新しい名称のフックに書き換えをおこなってください。

  • inc2734_view_controller_config_path フィルターフックをinc2734_wp_view_controller_config_path にリネーム
  • inc2734_view_controller_get_template_part_<slug>-<name> アクションフックを inc2734_wp_view_controller_get_template_part_<slug>-<name> にリネーム
  • inc2734_view_controller_get_template_part_<slug> アクションフックを inc2734_wp_view_controller_get_template_part_<slug> にリネーム
  • inc2734_view_controller_template_part_render フィルターフックを inc2734_wp_view_controller_template_part_render にリネーム
  • inc2734_view_controller_get_template_part_args フィルターフックを inc2734_wp_view_controller_get_template_part_args にリネーム
  • inc2734_view_controller_get_template_part_pre_render アクションフックを inc2734_wp_view_controller_get_template_part_pre_render にリネーム
  • inc2734_view_controller_get_template_part_post_render アクションフックを inc2734_wp_view_controller_get_template_part_post_render にリネーム
  • inc2734_view_controller_template_part_root フィルターフックを廃止
  • inc2734_view_controller_template_part_root_hierarchy フィルターフックを inc2734_wp_view_controller_template_part_root_hierarchy にリネーム
  • inc2734_view_controller_located_template_slug_fallback フィルターフックを inc2734_wp_view_controller_located_template_slug_fallback にリネーム
  • inc2734_view_controller_config フィルターフックを inc2734_wp_view_controller_config にリネーム

この記事を書いた人

キタジマ タカシ

長崎県長崎市在住。地元のWeb制作会社でWebデザイナー/エンジニアとして従事した後、2015年にフリーランス [ モンキーレンチ ] として独立。WordPress のテーマやプラグイン、ライブラリ、CSS フレームワーク等、多数のプロダクトをオープンソースで開発・公開しています。

Snow Monkey オンラインコミュニティ

Snow Monkey をより良いテーマにするために、今後の機能開発等について情報共有したりディスカッションをしたりする場所です。より多くのユーザーの交流があったほうがより良いプロダクトに育っていくと思いますので、ぜひご参加ください!