Виджеты wordpress

Доброе время суток. Недавно столкнулся с необходимостью сделать кое- какое дополнение для моего блога. Для этого есть виджеты. Сейчас я предложу удобный на мой взгляд вариант реализации данной задачи.

Ее плюсы в том что я создал отдельную папку куда буду складывать все свои виджеты, а не как пишется в документациях в одном файле темы. При чем если поменять тему то опять таки все ваши виджеты останутся, надо только будет подключить их. И так идея такова. Необходимо создать папку /wp-content/my_widgets/. В нее будем складывать все свои виджеты. Создадим в этой папке файл index.php.  В нем будут подключаться каждый виджет, с кодом примерно таким

<?///// подключение test виджета
include('test.php');?>

Далее. Создадим сам виджет. Я объясню только общий принцип, а далее программируем что необходимо от виджета. Создаем в этой же папке файл test.php, в котором и будет только наш виджет. В wordpress, для того чтобы виджет работал - необходимо его зарегистрировать. Т.е назначить функцию обработчик. Для этого есть функция add_action(); в которой первый параметр надо писать 'init', а вторым параметром название вашей функции обработчика.

<?
function register_my_test() {
    wp_register_sidebar_widget('testwid','Widget name', 'my_test_widget');
    wp_register_widget_control('testwid','Widget name', 'my_test_control' );
}

add_action('init', 'register_my_test');
?>

Выше приведен примерный код и самого обработчика. Поясню - функция wp_register_sidebar_widget - это и есть та функция, которая выводит данные на страницу в месте определенном под этот виджет. Точнее назначает обработчик.

'testwid' - уникальное имя виджета, 'Widget name' - Название виджета, 'my_test_widget' - функция обработчик

function my_test_widget($args) {

    extract($args);

    print $before_widget;
    print $before_title;
    print "Улыбочку :) ";
    print $after_title;
    print "Hello World!".get_option('test_var');
    print $after_widget;

}

массив $args - это входной массив с частями шаблона. Переменные  $before_widget, $before_title, $after_title, $after_widget - получаются из этого массива, в них хранится html который выводится до виджета, до заголовка, после заголовка, после виджета - соответственно. Функция get_option возвращает значение переменной 'test_var', которое мы сейчас зададим в админке.

Аналогично для задания функции обработчика, но для  административной части есть функция wp_register_widget_control, в которой третий параметр, как уже можно было догадаться и есть название функции обработчика.

<?
function my_test_control() {

    if (!empty($_REQUEST['test_var'])) {
	if (get_option('test_var')){
		update_option('test_var', $_REQUEST['test_var']);
	}else{
		add_option('test_var', $_REQUEST['test_var'], '', 'yes');
	}
    }
    print "<input type='text' name='test_var' value='".get_option('test_var')."'>";
}
?>

Этот код выведет input для задания переменной test_var и запишет ее при необходимости или создаст если она не была создана ранее.

Теперь остается только подключить наш index.php в самой теме. Для этого в файл /wp-content/НАЗВАНИЕ_ТЕМЫ/functions.php добавить следующую строку

<?
require_once ($_SERVER['DOCUMENT_ROOT'].'/wp-content/my_widgets/index.php');
?>

Вот и все - пользуйтесь. А ну конечно же в админке нужно настроить данный виджет, Заходим Внешний вид - Виджеты. Там все просто.

Запись опубликована в рубрике Веб-программирование. Добавьте в закладки постоянную ссылку.

2 комментария: Виджеты wordpress

  1. grorsempemo говорит:

    Радует, что ваш блог постоянно развивается. Такие посты только прибавляют популярности.