【问题标题】:How to extend a wordpress core widget?如何扩展 wordpress 核心小部件?
【发布时间】:2016-08-03 01:38:59
【问题描述】:

默认情况下,wordpress 有许多有用的小部件,例如 类别小部件。现在查看位于 wp_includes/widgets/class-categories-widget.php

的类 WP_Widget_Categories
class WP_Widget_Categories extends WP_Widget 
{
    /**
     * Sets up a new Categories widget instance.
     *
     * @since 2.8.0
     * @access public
     */
    public function __construct() 
    {
        $widget_ops = array(
            'classname' => 'widget_categories',
            'description' => __( 'A list or dropdown of categories.' ),
            'customize_selective_refresh' => true,
        );
        parent::__construct( 'categories', __( 'Categories' ), $widget_ops );
    }
    //...
}

我们在$widget_ops 数组中有一个选项,我想编辑类名widget_categories

搜索小部件

的另一个示例
public function __construct() 
{
    $widget_ops = array(
        'classname' => 'widget_search',
        'description' => __( 'A search form for your site.' ),
        'customize_selective_refresh' => true,
    );
    parent::__construct( 'search', _x( 'Search', 'Search widget' ), $widget_ops );
}

有时我们需要在这里编辑一些字符串。

那么我们如何扩展这些类呢?当然我不想编辑这些核心文件

【问题讨论】:

  • 为什么要更改类名?
  • @Jrob:因为那是核心文件,更新到新版本后会改变
  • 是的,我知道这是一个核心文件,您不应该更改它。我问你为什么要首先更改类名。这只是一个应用于类别小部件的 css 类,您可以使用该类对它们进行样式设置。那么更改类名的目的是什么?如果我了解您要达到的最终目标,我可以为您提供更好的答案。
  • @Jrod:好的,我看到你了,我们可以编辑 css。但想知道有没有办法做到这一点?谢谢
  • @Jrob:我编辑了问题,现在您可以看到,我们需要编辑一个字符串。它不是一个 CSS 类。

标签: php wordpress widget


【解决方案1】:

如果您想为所有小部件添加自定义类,您可以在注册侧边栏时执行此操作。 before_widget 参数是输出类名的地方。

<?php    
add_action( 'widgets_init', 'theme_slug_widgets_init' );
    function theme_slug_widgets_init() {
        register_sidebar( array(
            'name' => __( 'Main Sidebar', 'theme-slug' ),
            'id' => 'sidebar-1',
            'description' => __( 'Widgets in this area will be shown on all posts and pages.', 'theme-slug' ),
            'before_widget' => '<li id="%1$s" class="widget %2$s">', // this is where you would add additional classes
            'after_widget'  => '</li>',
            'before_title'  => '<h2 class="widgettitle">',
            'after_title'   => '</h2>',
        ) );
    }

如果您想要更精细的控制,您可以使用 dynamic_sidebar_params 过滤器循环浏览侧边栏中的小部件,并更改特定小部件的 before_title 参数。

add_filter( 'dynamic_sidebar_params', 'my_dynamic_params' );

function my_dynamic_params( $params ) {

    foreach ( $params as $key => $param ) {

        // check to see if the widget is a category widget
        if ( $param['widget_name'] == 'Categories' ) {
            $params[$key]['before_widget'] = '<li id="' . $param['widget_id'] . '" class="widget my-custom-class">';
        }
    }

    return $params;
}

【讨论】:

  • 非常感谢 Jrob。
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2015-07-06
  • 2023-03-12
  • 1970-01-01
  • 2014-04-06
相关资源
最近更新 更多