使用筛选器将缩略图添加到最近发布的小工具

时间:2016-08-06 作者:Chodhary

我想将缩略图添加到WordPress默认的最近帖子小部件中,并且我想使用任何可用的过滤器来完成。是否知道此主题/主题的任何筛选器

2 个回复
SO网友:birgire

这里有一种方法可以通过the_title 滤器我们可以通过在widget_posts_args 过滤,然后在循环后再次移除。

/**
 * 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()
thethe_title 过滤器对每个项目应用两次。这就是为什么我们只对奇数情况应用缩略图附加。

还要注意,这种方法假定标题为非空。

否则,只需根据我们的需要创建/扩展一个新的小部件就更灵活了。

SO网友:bravokeyl

No 过滤器可用。

检查/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;
它显然没有在循环中插入缩略图或任何内容的过滤器。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'