Вызов виджета с помощью функции в файлах тем (жесткий код)


Наконец-то я закончил писать свой виджет и теперь хочу вызвать его с помощью функции внутри 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 */ }
    }

Я уже знаю о следующих методах, которые вызывают виджет и могут быть размещены в файлах тем:
1. вызов с помощью короткого кода с do_shortcode() функция wp;
2. вызывающий виджет с the_widget() функция wp;
Оба этих метода отлично работают, но мой дизайнер отвергает их.
Он хочет к жесткому коду вызова виджета таким образом: if(function_exists('custom_widget')) { custom_widget(); }

Как я могу реализовать этот вариант? Может быть, разумно сделать еще одну функцию в классе виджетов, сделать ее глобальной или что-то в этом роде, она будет запускать виджет изнутри? Звучит как бред, но сейчас я действительно не понимаю, как решить эту проблему.

Author: drake2300, 2012-11-30

1 answers

Использование the_widget() является ли правильным способом "жесткого кода" произвольного виджета в файле шаблона:

<?php the_widget( 'foobar_widget', $instance, $args ); ?>

Поскольку the_widget() просто возвращает, если 'foobar_widget' не является зарегистрированным виджетом, это функционально эквивалентно использованию условного if ( function_exists( $function ) ).

Вы могли бы заглянуть в ядро, чтобы увидеть, как the_widget() проверяет, является ли 'foobar_widget' зарегистрированным виджетом ( if ! is_a( $widget_obj, 'foobar_widget' ) )); но на самом деле, зачем беспокоиться? Просто позвоните the_widget(). Вот для чего он существует.

 2
Author: Chip Bennett, 2012-11-30 13:07:14