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


17

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

是否有任何过滤器或挂钩可以做到这一点?


2
编写自己的小部件,该小部件可以满足您的需求。首先复制类别小部件的代码并进行修改。
Mark Kaplun

谢谢,我通常按照此技巧进行小部件修改。在我看来,这是更简单的方法。
Eh Jewel

Answers:


13

要扩展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()上述调用中使用的名称相同的名称。

然后进行所需的任何更改!我建议也更改标题,以便您可以将其与默认类别小部件区分开。


10

您可以通过扩展默认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' );

1
我之所以没有提供这种选择,是因为您可能会在某个时候想要原始的行为,而在您的解决方案中,您只是失去了获得它的能力。
马克·卡普伦

是的,如果您想保留默认的小部件,最好注册一个全新的小部件。codex.wordpress.org/Function_Reference/register_widget
Boris Kuzmanov

8

您无需创建一个完整的新窗口小部件即可执行所需的操作。当我阅读您的问题时,您只是对更改类别在前端显示的方式感兴趣。有两个功能可在前端显示类别

这完全取决于后端中选择了什么选项

现在,每次这两个函数有一个小部件特定的过滤器(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="' . echo $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;
}, 11, 2 );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.