修改最近发布的帖子小部件以包括帖子标题的图标

时间:2016-11-12 作者:Sameer Ali

我从wordpress存储库下载了一个插件,它允许在帖子标题中添加字体图标,你可以根据喜好为每个帖子选择不同的图标。现在,该插件在post archive模板和single post模板中显示的图标很好,但在最近发布的小部件上没有显示特色图标。我是web开发和wordpress新手,我很想知道如何修改wordpress最近的帖子小部件(或其他显示自定义帖子类型的小部件),以同时显示插件分配给特定帖子标题的特色图标。

山姆,非常感谢你的时间和帮助

插件链接:https://wordpress.org/plugins/post-featured-font-icon/

1 个回复
最合适的回答,由SO网友:birgire 整理而成

下面是一个如何预处理span 标记到帖子标题,其中span类添加到自定义字段中wpse_post_icon_class.

我们可以尝试将其限制在最近发布的小部件上,包括:

add_filter( \'widget_display_callback\', function( $instance, $obj, $args )
{
    // Only target Recent Posts widgets
    if( \'recent-posts\' === $obj->id_base )
    {
        // Add filter
        add_filter( \'the_title\', \'wpse_title_with_icon\', 10, 2 );

        // Widget output
        $obj->widget( $args, $instance );

        // Remove filter
        remove_filter( \'the_title\', \'wpse_title_with_icon\', 10, 2 );            

        // Override the default widget output
        return true;
    }       
    return $instance;
}, 10, 3 );
其中,过滤器回调定义为:

function wpse_title_with_icon( $title, $post_id )
{
    // check if the current post has the \'wpse_post_icon_class\' custom field
    if( $icon = get_post_meta( $post_id, \'wpse_post_icon_class\', true ) )
        $title = sprintf( 
            \'<span class="%s"></span> %s\', 
             esc_attr( trim( $icon ) ), 
             $title 
        );

    return $title;
}

Example:

这里有一个Dashicon 示例中,我们添加wpse_post_icon_class 值为的自定义字段dashicons dashicons-flag:

custom field settings

然后,“最近的帖子”窗口小部件将显示为:

recent posts

其中,相应的标题前面有:

<span class="dashicons dashicons-flag"></span>

Notes:

最好只存储flag 字符串,那么我们应该考虑一个更具体的名称,如wpse_post_dashicon_class, 而不是泛型wpse_post_icon_class 名称

我们可能还想扩展此功能,并创建一个元框,用户可以在其中单击要关联帖子的图标。

我们必须将Dashicons或我们选择使用的字体或svg图标排列在前端。

另一种选择是写一个custom widgetshortcode 以获得更大的灵活性。

希望有帮助。

相关推荐

My widgets do not save

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