gpt4 book ai didi

WordPress:向所有小部件设置添加配置选项

转载 作者:行者123 更新时间:2023-12-02 10:21:31 26 4
gpt4 key购买 nike

在 Wordpress 中,我的目标是能够为我放在侧边栏中的每个小部件提供自定义类。最好我想在每个小部件的小部件设置中添加此类。还有第 3 方小部件。

我正在考虑更改类名,因为类名已传递给 register_sidebar 函数 (%2$s):

<?php
register_sidebar(array('before_widget' => '<aside id="%1$s" class="widget %2$s blue">'));
?>

当然我不应该更改 WP 核心代码或第 3 方插件。这意味着我需要编写一个插件来 Hook 小部件配置过程。

我已经发现可以通过 Hook 操作“in_widget_form”来修改所有小部件表单:

<?php
add_action('in_widget_form', 'teaserWidgetAddToForm');

function teaserWidgetAddToForm($widget_instance) {
?>
<label for="<?php echo $widget_instance->get_field_id('teaser-classname'); ?>">Custom classname(s):</label>
<input type="text" id="<?php echo $widget_instance->get_field_id('teaser-classname'); ?>" name="<?php echo $widget_instance->get_field_name('teaser-classname'); ?>">
<?php
}
?>

此数据应该由 Widget 父类(super class)保存,但是如何检索此数据(以便稍后打开小部件设置时显示您之前填写的内容)

并且,这个保存的数据应该放在小部件实例中 - 这是如何完成的?我想通过使用类似的东西:

<?php
$wp_registered_widgets[<widget_id>]['callback'][0]['widget_options']['classname'] = <chosen_class>;
?>

所以基本上我有两个问题:

  • 我是否使用正确的方法来解决这个问题(单个小部件的样式)
  • 如果是这样,我如何修改小部件实例以保存和检索其他设置,而无需修改 Wordpress 或第 3 方插件源代码。

最佳答案

  1. 默认情况下,每个小部件实例都有一个唯一的 ID,可用于设置其样式。

  2. 为了保存 in_widget_form 操作中添加的字段中的数据,您还需要有一个 widget_update_callback 过滤器。

    function my_widget_update_callback($instance, $new_instance) {
    $instance['my_classnames'] = $new_instance['my_classnames'];
    return $instance;
    }

    要在表单中显示保存的值,您需要首先检索实例设置。

    function my_in_widget_form($instance) {
    $settings = $instance->get_settings();

    最后,我认为添加自定义类的最简单方法是在 widget_display_callback 过滤器中,该过滤器在显示小部件之前运行。您必须自己显示小部件,因为您只能从此过滤器返回一个实例,而实例不控制小部件 CSS 类。

    function my_widget_display_callback($instance, $widget, $args) {
    if (!isset($instance['my_classnames'])) {
    return $instance;
    }

    $widget_classname = $widget->widget_options['classname'];
    $my_classnames = $instance['my_classnames'];

    $args['before_widget'] = str_replace($widget_classname, "{$widget_classname} {$my_classnames}", $args['before_widget']);

    $widget->widget($args, $instance);

    return false;
    }

有关与小部件相关的可用 Hook 的更多信息,请参阅本文:http://shibashake.com/wordpress-theme/wordpress-widget-system

关于WordPress:向所有小部件设置添加配置选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12351603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com