Вызов виджета с помощью функции в файлах тем (жесткий код)
Наконец-то я закончил писать свой виджет и теперь хочу вызвать его с помощью функции внутри 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(); }
Как я могу реализовать этот вариант? Может быть, разумно сделать еще одну функцию в классе виджетов, сделать ее глобальной или что-то в этом роде, она будет запускать виджет изнутри? Звучит как бред, но сейчас я действительно не понимаю, как решить эту проблему.
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()
. Вот для чего он существует.