从微件实例创建变量

时间:2014-06-02 作者:Keir Lavelle

是否可以将小部件实例返回到变量或数组中?我在想$widget[\'title\'], $widget[\'content\']

我试过检查global $wp_registered_widgets 变量,但它似乎只包含与呈现小部件相关的信息,而不是小部件内容本身。我还可以通过使用

ob_start(); 
dynamic_sidebar(\'widgetarea\'); 
$sidebar = ob_get_contents();    
ob_end_clean();
我想我可以用jQuery parseHTML方法将其解析为一系列dom节点,然而这似乎是一种非常混乱的方式,我想知道是否有人可以建议一种更优雅的方式?

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

小部件设置存储在哪里

小部件设置存储在wp_options 桌子您可以使用

print_r( get_option( \'widget_x\' ) );
其中x是$id_base WP\\u小部件类构造函数的输入参数。如果$id_base 为空,则使用小写字母的小部件类名,不带前缀:wp_widgetwidget_.

下面是一个示例:

class WP_Widget_Categories extends WP_Widget {

        function __construct() {
                $widget_ops = array( \'classname\' => \'widget_categories\', \'description\' => __( "A list or dropdown of categories." ) );
                parent::__construct(\'categories\', __(\'Categories\'), $widget_ops);
        }
您可以在下面的中看到如何创建相应的选项名称WP_Widget 类构造函数:

function __construct( $id_base, $name, $widget_options = array(), $control_options = array() ) {
            $this->id_base = empty($id_base) ? preg_replace( \'/(wp_)?widget_/\', \'\', strtolower(get_class($this)) ) : strtolower($id_base);
            $this->name = $name;
            $this->option_name = \'widget_\' . $this->id_base;
            $this->widget_options = wp_parse_args( $widget_options, array(\'classname\' => $this->option_name) );
            $this->control_options = wp_parse_args( $control_options, array(\'id_base\' => $this->id_base) );
    }
其中,保存设置方法为:

   function save_settings($settings) {
            $settings[\'_multiwidget\'] = 1;
            update_option( $this->option_name, $settings );
    }
示例:

Widget class name      | Option name
------------------------------------------
WP_Widget_Text         | widget_text
WP_Widget_Archives     | widget_archives
WP_Widget_Calendar     | widget_calendar
WP_Widget_Search       | widget_search    
WP_Widget_Tag_Cloud    | widget_tag_cloud
WP_Widget_Categories   | widget_categories
WP_Widget_Recent_Posts | widget_recent-posts
My_Widget              | widget_my_widget

... etc
对于多窗口小部件,选项值是一个以实例号作为数组键的数组。

示例:文本小部件要从文本小部件检索所有保存的数据,我们可以使用:

print_r( get_option( \'widget_text\' ) );
并获得以下输出:

Array(

   [1] => Array
        (
            [title] => Bacon Ipsum
            [text] => Bacon ipsum dolor sit amet t-bone shankle landjaeger, turkey meatloaf shank swine jowl jerky doner kielbasa salami ham. 
            [filter] => 
        )
   [3] => Array
        (
            [title] => Lorem Ipsum
            [text] => Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
            [filter] => 
        )

    [_multiwidget] => 1
)
我希望这有帮助。

结束

相关推荐

Page full of widgets?

有没有可能创建一个只有很多小部件的页面?我看到的大多数WP站点的小部件都在侧边栏中,但我想要一个只有小部件而没有其他内容的页面。我当前使用的主题允许我向页面添加列或表,但我不知道(在任何主题中)是否可以向这些列或表单元格添加小部件?