WordPressプラグイン「Custom Post Type Widgets」のウィジェット「最近の投稿」でアイキャッチ画像を表示する

WordPressプラグイン「Custom Post Type Widgets」バージョン 1.2.0 からフィルタフックやアクションフックを追加したり、タグ名を見直して改善しました。フィルタフックやアクションフックを使って機能を追加したり、カスタマイズできる余地が広がりました。

今回、アクションフックを使ってウィジェット「最近の投稿」でアイキャッチ画像を表示するサンプルを紹介したいと思います。

アクションフックは、
それぞれの投稿リストの前に追加できる custom_post_type_widgets/recent_posts/widget/prepend を使います。

サンプルコードは以下の通りになります。

function cptw_hooks_setup() {
  add_action( 'custom_post_type_widgets/recent_posts/widget/prepend', 'cptw_recent_posts_prepend', 10, 4 );
}
add_action( 'after_setup_theme', 'cptw_hooks_setup' );

function cptw_recent_posts_prepend( $widget_id, $posttype, $instance, $recent_post ) {
  if ( has_post_thumbnail( $recent_post ) ) {
    echo get_the_post_thumbnail( $recent_post );
  }
}

こんな感じでアイキャッチ画像の表示ができます。

あとはスタイルシートでレイアウトを整えて完了。アイキャッチ画像を付けたいというときに試してみてください。

リソース

WordPressプラグイン「Custom Post Type Widgets」に Search Widget を追加しました

カスタム投稿タイプで活用できるデフォルトウィジェット WordPressプラグイン「Custom Post Type Widgets」をアップデートしました。

今回のアップデートでは、新たに Search Widget を追加しました。

投稿、固定ページ、カスタム投稿タイプで絞り込み検索ができます。

また、Search Widget と Comments Widget には Custom Post Type すべてを対象にできるようにしてみました。

開発裏話

今回いろいろ手を入れて、ウィジェット独自にキャッシュ機能があったのを削除したり、全面的にリファクタリングをして、コード数もざっくり減らすことが出来ました。

一番悩んだことは、Search Widget は GitHub でプルリクをいただいたのですが、うまく機能しなかったこと。
書いたプラグインがダメではなく WordPress 本体の方。個別ページだけの検索絞り込みができない。

ググってもあまり分からず、WordPressで検索の絞り込みノウハウが書いてあるブログ記事を見てもなぜか投稿ページだけの絞り込みに関してはたくさんあるが、ページに関してはほとんどなかったり。

ということでソースコード (wp-includes/post.php) を読むと、個別ページを作成する register_post_type には、publicly_queryable に false が設定されており、フロントエンドで post_type クエリが実行できないようになっています。(なぜそうなっているのか開発フォーラムを見ても経緯がよく分からなかったのですが...)

実際、?post_type=page でアクセスしても post_type が破棄されて (unset)、裏で revision以外すべてのタイプ (any) が検索対象になったりします。

個別ページだけの検索絞り込みをするために対処したことは、検索ページが表示される時に、pre_get_posts にフックして破棄された post_type を再度追加してみました。

他のアプローチとしては、register_post_type で登録されたものを変更してもいいのではと思ったのですが、そもそも register_post_type を実行途中で変えていいのか、検索時だけなので影響範囲を考えるとこれでいいのではないかと。
また、register_post_type の変更方法がわからないというのもあります... 誰かどういうアプローチがあるのか教えてください。

おかげさまで

WordPressプラグイン「Custom Post Type Widgets」は2015年1月にリリースして一年あまり。海外の開発者に反応が良く、プルリクをいただいたり、段々使われるプラグインに育ちつつあります。カスタム投稿タイプを使ったテーマ開発に是非使ってみてくださいね。

ダウンロード & インストール

WordPress の公式プラグインページ

ライセンス

GNU General Public License v2.0 (GPLv2) licenses

開発

GitHub

カスタム投稿タイプのデフォルトウィジェット一式が詰まったWordPressプラグイン「Custom Post Type Widgets」をリリースしました

カスタム投稿タイプで活用できるデフォルトウィジェット 6 点が詰まった WordPressプラグイン「Custom Post Type Widgets」を作りました。

作ったのはおよそ 3 年前になりますが。最近ソースコードを整理して、というかほぼ標準ウィジェットのソースをベースに機能拡張とリファクタリングしたのをリリースしました。

デフォルトウィジェット 6 点

機能は、Custom Post Type や Taxonomy で絞り込みができる以外は、WordPressの標準ウィジェットとほぼ同じです。

ユーティリティプラグイン「Custom Post Type Rewrite」で日付ベースのパーマリンクを追加

デフォルトでは、カスタム投稿タイプでカレンダーやアーカイブなど日付ベースのリンクが機能しません。WordPressは、カスタム投稿タイプを使ったパーマリンク設定が一部用意されていないようです。なのでカスタム投稿タイプでブログと同じように機能しません。そのためには、カスタム投稿タイプのパーマリンク設定が編集できたり、パーマリンクを追加してくれるプラグインを導入する必要があります。

今回パーマリンクを追加してくれるユーティリティプラグイン「Custom Post Type Rewrite」も作ったのであわせて使ってみてください。ほかにパーマリンク構造が編集できるプラグイン「Custom Post Type Permalinks」などいろいろあるので検討してみてください。

以上でカスタム投稿タイプでブログとほぼ同じように機能します。個人的にコレを実現したかった。是非活用してみてください。

標準ウィジェットと置き換える方法

WordPressプラグイン「Custom Post Type Widgets」を有効化すると、WordPress管理画面のウィジェットにある「利用できるウィジェット」に標準のウィジェットといっしょに追加されます。

標準ウィジェットと機能的に同じで重複して並ぶのはあれだなぁと。標準ウィジェットと置き換えたい場合の Tips です。以下のソースを functions.php にコピペするだけ。

function remove_default_widget() {
unregister_widget( 'WP_Widget_Recent_Posts' );
unregister_widget( 'WP_Widget_Archives' );
unregister_widget( 'WP_Widget_Categories' );
unregister_widget( 'WP_Widget_Calendar' );
unregister_widget( 'WP_Widget_Recent_Comments' );
unregister_widget( 'WP_Widget_Tag_Cloud' );
}
add_action( 'widgets_init', 'remove_default_widget' );

管理画面をスッキリとさせたい場合はどうぞ。

参考: Function Reference/unregister widget

ダウンロード & インストール

WordPress の公式プラグインページ

ライセンス

GNU General Public License v2.0 (GPLv2) licenses

開発

GitHub

Donationware

よろしければ、開発とメンテナンスのために寄付していただければうれしいです。

If you like this plugin, please donate to support development and maintenance.

thingsymのほしい物リスト

最近の投稿

カテゴリー

アーカイブ