WordPressのデフォルトの最近の投稿ウィジェットにサムネイルを追加したいのですが、利用可能なフィルタを使用してそれを行いたいのです。この件名/トピックについて知っているフィルターはありますか
これはthe_title
フィルタを通してそれをする一つの方法です。 widget_posts_args
フィルタ内で初期化してからループの後でそれを再び削除することで、スコープを Recent Posts ウィジェットに制限することができます。
/**
* Recent Posts Widget: Append Thumbs
*/
add_filter( 'widget_posts_args', function( array $args )
{
add_filter( 'the_title', 'wpse_prepend_thumbnail', 10, 2 );
add_action( 'loop_end', 'wpse_clean_up' );
return $args;
} );
定義する場所
function wpse_prepend_thumbnail( $title, $post_id )
{
static $instance = 0;
// Append thumbnail every second time (odd)
if( 1 === $instance++ % 2 && has_post_thumbnail( $post_id ) )
$title = get_the_post_thumbnail( $post_id ) . $title;
return $title;
}
そして
function wpse_clean_up( \WP_Query $q )
{
remove_filter( current_filter(), __FUNCTION__ );
remove_filter( 'the_title', 'wpse_add_thumnail', 10 );
}
WP_Widget_Recent_Posts::widget()
メソッドのこのチェックのために注意してください。
get_the_title() ? the_title() : the_ID()
the_title
フィルタは各項目に対して2回適用されます。そのため、奇妙な場合にはサムネイルの追加のみを適用します。
また、このアプローチでは空ではないタイトルを想定しています。
それ以外の場合は、代わりに新しいウィジェットを作成/拡張するほうがより柔軟です。
いいえ 利用可能なフィルタ。
/wp-includes/widgets/class-wp-recent-posts-widget.php
をチェックすると以下がウィジェットを出力するコードです。
$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
) ) );
if ($r->have_posts()) :
?>
<?php echo $args['before_widget']; ?>
<?php if ( $title ) {
echo $args['before_title'] . $title . $args['after_title'];
} ?>
<ul>
<?php while ( $r->have_posts() ) : $r->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo get_the_date(); ?></span>
<?php endif; ?>
</li>
<?php endwhile; ?>
</ul>
<?php echo $args['after_widget']; ?>
<?php
// Reset the global $the_post as this query will have stomped on it
wp_reset_postdata();
endif;
これは明らかにいくつかのサムネイルまたはループに何かを挿入するためのフィルタを持っていません。