如何修改WordPress默认窗口小部件输出?

时间:2016-06-15 作者:Eh Jewel

我不想只使用CSS设置默认小部件的样式。我想用我自己的HTML结构显示默认的“类别”小部件内容。

是否有可用的过滤器或挂钩?

3 个回复
最合适的回答,由SO网友:Tim Malone 整理而成

要扩展Mark的答案,默认WordPress小部件中的过滤器(除了widget_text).

但是添加您自己的自定义小部件很容易-请将其放在您的functions.php:

require_once("my_widget.php");
add_action("widgets_init", "my_custom_widgets_init");

function my_custom_widgets_init(){
  register_widget("My_Custom_Widget_Class");
}
然后,您只需从wp-includes/widgets/class-wp-widget-categories.phpmy_widget.php 并将类名更改为调用中使用的名称register_widget() 在上面

然后做你喜欢的任何改变!我建议也更改标题,以便您可以将其与默认类别小部件区分开来。

SO网友:Boris Kuzmanov

您可以通过扩展默认WordPress小部件来覆盖它们。默认类别小部件的代码可以在以下链接上找到:https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/

下面是如何重写小部件输出的示例代码。

Class My_Categories_Widget extends WP_Widget_Categories {
    function widget( $args, $instance ) {
        // your code here for overriding the output of the widget
    }
}

function my_categories_widget_register() {
    unregister_widget( \'WP_Widget_Categories\' );
    register_widget( \'My_Categories_Widget\' );
}
add_action( \'widgets_init\', \'my_categories_widget_register\' );

SO网友:Pieter Goosen

您不需要创建一个完整的新小部件来完成所需的操作。当我读到你的问题时,你只是想改变类别在前端的显示方式。有两个功能可在前端显示类别

  • wp_list_categories() 在列表中显示类别

  • wp_dropdown_categories() 在下拉列表中显示类别

    这一切都取决于在后端选择了什么选项

    现在,这两个函数都有一个特定于小部件的过滤器(widget_categories_argswidget_categories_dropdown_args 可以使用它来更改应传递给这些函数的参数。您可以使用它来更改列表/下拉列表的行为。然而,这可能不足以满足您的需要。

    或者,每个函数都有自己的过滤器,以完全改变这些函数显示其输出的方式。

    它们分别是

    我们可以使用widget_title 筛选以仅针对小部件,而不是这些功能的其他实例。

    简而言之,您可以尝试以下操作:((完全未经测试)

    add_filter( \'widget_title\', function( $title, $instance, $id_base )
    {
        // Target the categories base
        if( \'categories\' === $id_base ) // Just make sure the base is correct, I\'m not sure here
            add_filter( \'wp_list_categories\', \'wpse_229772_categories\', 11, 2 );
            //add_filter( \'wp_dropdown_cats\', \'wpse_229772_categories\', 11, 2 );
        return $title;
    }, 10, 3 );
    
    function wpse_229772_categories( $output, $args )
    {
        // Only run the filter once
        remove_filter( current_filter(), __FUNCTION__ );
    
        // Get all the categories
        $categories = get_categories( $args );
    
        $output = \'\';
        // Just an example of custom html
        $output .= \'<div class="some class">\';
        foreach ( $categories as $category ) {
            // Just an example of custom html
            $output .= \'<div class="\' . $category->term_id . \'">\';
            // You can add any other info here, like a link to the category
            $output .= $category->name;
            // etc ect, you get the drift
            $output .= \'</div>\';
        }
        $output .= \'</div>\';
    
        return $output;
    };
        
    

相关推荐

Apply_Filters()对所需的参数进行切片

我正在尝试向WooCommerce订单中的每个退款行添加一个按钮(其功能超出了这个问题的范围,足以说明它需要退款id作为参数)。我发现这些行是在woocommerce\\includes\\admin\\meta Box\\views\\html订单退款中创建的。无法重写的php。然而,有一项行动:do_action( \'woocommerce_admin_order_item_values\', null, $refund, $refund->get_id() ); 这似乎非常适合我的