通过主题文件中的函数调用Widget(硬编码)

时间:2012-11-30 作者:drake2300

最后,我完成了小部件的编写,现在想使用主题php文件中的函数调用它。我的小部件如下所示:

    function reg_custom_widget() {
        register_widget(\'wp_custom_widget\');
    }
    class wp_custom_widget extends WP_Widget {
        function wp_custom_widget() { /* constructor */ }
        function widget($args, $instance) { /* here is the code, that uses \'core\' functions to build the result and display it */ }
        function shortcode_handler($atts) { /* the same code as in widget() with a couple of features */ }

        /* here are basic functions, strongly related. they perform main widget functionality */
        function core_func_one($input) { }
        function core_func_two($input) { }
        function core_func_three($input) { }
        function core_func_four($input) { }
        function core_func_five($input) { }

        function update($new_instance, $old_instance) { /* updating settings */ }   
        function form($instance) {  /* building widget setup-form */ }
    }
我已经知道以下方法,这些方法调用widget,可以放在主题文件中:
1. 通过短代码调用do_shortcode() wp功能
2. 使用调用小部件the_widget() wp功能<这两种方法都很有效,但我的设计师拒绝了它们
他想以这种方式硬编码小部件的调用:if(function_exists(\'custom_widget\')) { custom_widget(); }

如何实现此选项?也许在widget类中创建另一个函数是合理的,使其成为全局函数或其他函数,它将从内部运行widget?听起来像是精神错乱,但我现在真的不明白如何解决这个问题。

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

使用the_widget() 在模板文件中“硬编码”任意小部件的正确方法是:

<?php the_widget( \'foobar_widget\', $instance, $args ); ?>
the_widget() 仅在以下情况下返回\'foobar_widget\' 不是已注册的小部件,它在功能上等同于使用if ( function_exists( $function ) ) 有条件的

你可以look in core to see how the_widget() verifies \'foobar_widget\' is a registered Widget ()if ! is_a( $widget_obj, \'foobar_widget\' ) )); 但真的,为什么要麻烦呢?打个电话就行了the_widget(). 这就是它的目的。

结束