如何将自定义域添加到所有注册小工具的小部件选项中的设置?

时间:2014-02-13 作者:Shashank Ashok Chinchli

我想在单击小部件设置时在自定义表单中添加输入框。真的希望所有小部件中的这个附加文本框都是定制的或默认的。我需要帮助在Wordpress小部件中为所有注册了主题的小部件添加新的可配置输入框。

等待您的意见/建议,谢谢。

2 个回复
SO网友:Linda H

您还需要查看以下操作和筛选器:

  • in_widget_form - 向现有表单添加内容
  • widget_update_callback - 保存新表单的内容
  • widget_display_callback - 将输出添加到现有输出
在论坛和谷歌上搜索一下,你会发现很多帮助,但我发现this page 这对我自己开始很有用。

SO网友:Towfiq

琳达发布的链接是一块宝石!不幸的是,它现在坏了。刚刚通过时光倒流机检索到的内容:

Step 1: Register the form elements (The widget Control)

function kk_in_widget_form($t,$return,$instance){
    $instance = wp_parse_args( (array) $instance, array( \'title\' => \'\', \'text\' => \'\', \'float\' => \'none\') );
    if ( !isset($instance[\'float\']) )
        $instance[\'float\'] = null;
    if ( !isset($instance[\'texttest\']) )
        $instance[\'texttest\'] = null;
    ?>
    <p>
        <input id="<?php echo $t->get_field_id(\'width\'); ?>" name="<?php echo $t->get_field_name(\'width\'); ?>" type="checkbox" <?php checked(isset($instance[\'width\']) ? $instance[\'width\'] : 0); ?> />
        <label for="<?php echo $t->get_field_id(\'width\'); ?>"><?php _e(\'halbe Breite\'); ?></label>
    </p>
    <p>
        <label for="<?php echo $t->get_field_id(\'float\'); ?>">Float:</label>
        <select id="<?php echo $t->get_field_id(\'float\'); ?>" name="<?php echo $t->get_field_name(\'float\'); ?>">
            <option <?php selected($instance[\'float\'], \'none\');?> value="none">none</option>
            <option <?php selected($instance[\'float\'], \'left\');?>value="left">left</option>
            <option <?php selected($instance[\'float\'], \'right\');?> value="right">right</option>
        </select>
    </p>
    <input type="text" name="<?php echo $t->get_field_name(\'texttest\'); ?>" id="<?php echo $t->get_field_id(\'texttest\'); ?>" value="<?php echo $instance[\'texttest\'];?>" />
    <?php
    $retrun = null;
    return array($t,$return,$instance);
}

Step 2: Save the Widget input data:

function kk_in_widget_form_update($instance, $new_instance, $old_instance){
    $instance[\'width\'] = isset($new_instance[\'width\']);
    $instance[\'float\'] = $new_instance[\'float\'];
    $instance[\'texttest\'] = strip_tags($new_instance[\'texttest\']);
    return $instance;
}

Step 3: Display the value in widget output:

function kk_dynamic_sidebar_params($params){
    global $wp_registered_widgets;
    $widget_id = $params[0][\'widget_id\'];
    $widget_obj = $wp_registered_widgets[$widget_id];
    $widget_opt = get_option($widget_obj[\'callback\'][0]->option_name);
    $widget_num = $widget_obj[\'params\'][0][\'number\'];
    if (isset($widget_opt[$widget_num][\'width\'])){
            if(isset($widget_opt[$widget_num][\'float\']))
                    $float = $widget_opt[$widget_num][\'float\'];
            else
                $float = \'\';
            $params[0][\'before_widget\'] = preg_replace(\'/class="/\', \'class="\'.$float.\' half \',  $params[0][\'before_widget\'], 1);
    }
    return $params;
}

Step 4: Now call your functions above with wordpress action hooks:

//Add input fields(priority 5, 3 parameters)
add_action(\'in_widget_form\', \'kk_in_widget_form\',5,3);
//Callback function for options update (priorität 5, 3 parameters)
add_filter(\'widget_update_callback\', \'kk_in_widget_form_update\',5,3);
//add class names (default priority, one parameter)
add_filter(\'dynamic_sidebar_params\', \'kk_dynamic_sidebar_params\');
Source

结束

相关推荐

Prevent widgets removal

我正在用许多小部件构建一个网站。它们是高度定制的。当站点处于活动状态时,几个管理员/编辑器必须编辑这些小部件。现在,我很害怕看到一个小部件(及其配置)可以在一次鼠标移动中完全擦除(将其从侧栏中删除)。有没有什么方法可以防止小部件被删除,同时保持编辑其内容的能力?此外,在我看来,管理中的widget管理页面为“添加widget”模块提供了太多的空间,而为“激活的widget”模块提供的空间不足。这在创建站点时很有用,但在完成站点时却毫无用处。有没有办法切换这些模块的大小?非常感谢