如何在所有WordPress可用的小工具中添加额外的字段?

时间:2012-09-26 作者:idontknowhow

我一直在搜索如何在每个WordPress可用的小部件上添加一个额外的字段,比如Subtitle 在小部件的Title.

有没有办法钩住每个可用的小部件?

1 个回复
最合适的回答,由SO网友:brasofilo 整理而成

我知道插件Widget Logic 确实如此。

分解其代码后,摘录bellow将在所有小部件中输出一个textarea。

adding textarea in all available widgets

但请注意:

这只是一个概念证明,并且“保存字段”控件不存在。最好的解决方案可能是将插件分成几个部分,删除不需要的功能,然后添加自己的插件代码。插件代码不太容易阅读

if ( is_admin() )
{
    add_action( \'sidebar_admin_setup\', \'widget_logic_expand_control\' );
}

// CALLED VIA \'sidebar_admin_setup\' ACTION
// adds in the admin control per widget, but also processes import/export
function widget_logic_expand_control()
{   
    global $wp_registered_widgets, $wp_registered_widget_controls, $wl_options;

    // ADD EXTRA WIDGET LOGIC FIELD TO EACH WIDGET CONTROL
    // pop the widget id on the params array (as it\'s not in the main params so not provided to the callback)
    foreach ( $wp_registered_widgets as $id => $widget )
    {   // controll-less widgets need an empty function so the callback function is called.
        if (!$wp_registered_widget_controls[$id])
            wp_register_widget_control($id,$widget[\'name\'], \'widget_logic_empty_control\');
        $wp_registered_widget_controls[$id][\'callback_wl_redirect\'] = $wp_registered_widget_controls[$id][\'callback\'];
        $wp_registered_widget_controls[$id][\'callback\'] = \'widget_logic_extra_control\';
        array_push( $wp_registered_widget_controls[$id][\'params\'], $id );   
    }

}

// added to widget functionality in \'widget_logic_expand_control\' (above)
function widget_logic_empty_control() {}

// added to widget functionality in \'widget_logic_expand_control\' (above)
function widget_logic_extra_control()
{   
    global $wp_registered_widget_controls, $wl_options;

    $params = func_get_args();
    $id = array_pop($params);

    // go to the original control function
    $callback = $wp_registered_widget_controls[$id][\'callback_wl_redirect\'];
    if ( is_callable($callback) )
        call_user_func_array($callback, $params);       

    $value = !empty( $wl_options[$id] ) ? htmlspecialchars( stripslashes( $wl_options[$id ] ),ENT_QUOTES ) : \'\';

    // dealing with multiple widgets - get the number. if -1 this is the \'template\' for the admin interface
    $number=$params[0][\'number\'];
    if ($number==-1) {
        $number="%i%"; 
        $value="";
    }
    $id_disp=$id;
    if ( isset($number) ) 
        $id_disp = $wp_registered_widget_controls[$id][\'id_base\'].\'-\'.$number;

    // output our extra widget logic field
    echo "<p><label for=\'".$id_disp."-widget_logic\'>My logic <textarea class=\'widefat\' type=\'text\' name=\'".$id_disp."-widget_logic\' id=\'".$id_disp."-widget_logic\' >".$value."</textarea></label></p>";
}

结束

相关推荐

Wp-content/plugins中的权限问题

我在本地机器上安装了一个WP,试图用插件弄脏我的手。我希望从github克隆一个包含此插件代码的项目。然而,我没有插件内部的权限,作为一个没有su权限的普通用户,我无法做到这一点。(当然,我可以成为根并这样做,但我不认为这是应该的)。然后,默认情况下,WP安装中的文件夹将组设置为“tape”,这对我来说很奇怪。本地WP安装上内部文件夹的正确权限应该是什么?