如何在自定义小部件代码中获取“Widget Logic”插件的输入值(显示在小部件管理页面上)

时间:2011-06-01 作者:dashaluna

我已经安装了“Widget Logic”插件。我已经创建了自己的小部件“Buzz”。我有一个侧栏,其中有我的自定义小部件“Buzz”的多个实例。

现在,在Widgets admin页面上,当侧栏被打开并且侧栏中的所有小部件都被关闭时,您可以看到小部件名称和小部件实例标题(如果指定了名称)。

例如,如果我有两个标题不同的“Buzz”小部件实例,在小部件管理页面上,它看起来像:

Buzz: Title 1
Buzz: Title 2
我想做的是在小部件管理页面的“小部件名称:小部件实例标题”行下显示为小部件实例指定的“小部件逻辑”值。例如:

Buzz: Title 1
Displayed on: is_front_page()

Buzz: Title 2
Displayed on: is_page("page_slug")
希望这是有意义的。

如果有人能帮我解决这个问题,我将不胜感激:如何获取“Widget Logic”输入框中指定的值,并将其显示在Widget admin页面上的Widget实例标题下。

非常感谢,Dasha

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

我几乎可以肯定,如果不破解核心文件,就无法做到这一点(服务器端),但幸运的是,我懂一点jQuery,我已经想出了这个黑客功能,它可以很好地完成这项工作:

enter image description here

function widget_logic_hack(){ 
global $pagenow;
if ($pagenow == \'widgets.php\'){
    ?>
    <script>
    function hack_logic(){
     jQuery(\'input[id$="widget_logic"]\').each(function()
        {       
                if (jQuery(this).val().length === 0){}else{
                    var id = this.id;
                    var value = jQuery(this).val();
                    //alert(value);
                    id = id.replace(\'-widget_logic\',\'\');
                    var currenttitle = jQuery("[id$=\'"+ id +"\']").find(\'h4\').html();
                    if (currenttitle.indexOf(\'Displayed on:\') !=-1 ){
                        var ncurrenttitle = currenttitle.substring(0,(currenttitle.indexOf(\'Displayed on:\')));
                        //alert(ncurrenttitle);
                         jQuery("[id$=\'"+ id +"\']").find(\'h4\').html(ncurrenttitle + \'Displayed on: <span class="in-widget-title">\' + value + \'</span>\');
                    }else{
                        jQuery("[id$=\'"+ id +"\']").find(\'h4\').html(currenttitle + \'<br /> Displayed on: <span class="in-widget-title">\' + value + \'</span>\');
                    }
                }
        });
    }
    jQuery(document).ready(function(){
        setTimeout("hack_logic()",500);
        jQuery(\'#savewidget\').live(\'click\', function() {
             setTimeout("hack_logic()",5500);
             return true;
        });
    });
    </script>
    <style>.widget .widget-top {height: 40px !important;}</style>
    <?php
}

}

add_action(\'admin_footer\',\'widget_logic_hack\');

结束

相关推荐

为什么我不能在admin_init之后连接到save_post?

我试图从插件中的AJAX回调中钩住“save\\u post”操作,但它似乎不起作用。事实上,连接到“save\\u posts”似乎只在几个关键操作执行点(例如“init”或“admin\\u init”)起作用,而在其他点(例如“add\\u meta\\u box”回调)起不到作用。在我的特殊情况下,我想单击Edit Post屏幕上的一个按钮来添加一个新的自定义metabox,并让它正确保存metabox的数据。当然,当我单击该按钮并添加该元盒时,我已经钩住了“save\\u post”操作一次,W