Как редактировать виджеты в WordPress

16 янв. 2012 г., 14:20:21
Просмотры: 49.6K
Голосов: 7

В меню Внешний вид -> Виджеты есть список виджетов, которые можно перетаскивать для отображения в боковой панели.

Где находится HTML/PHP код для этих пользовательских виджетов?

Я просмотрел справочник функций WordPress, но ничего не нашел. Очевидно, что эти виджеты должны подгружаться из HTML/PHP шаблона.

Причина, по которой я хочу это узнать: по умолчанию заголовки виджетов обернуты в теги <h3>, а я хочу изменить их на теги <h5>. Также мне нужно добавить несколько <hr /> и другие элементы.

Я просмотрел файл theme/includes/widgets.php, но ничего не нашел.

Кстати, я использую копию темы Twenty Eleven для модификации своей темы.

Код в theme/sidebar.php предназначен для (!dynamic_sidebar()), однако моя боковая панель является динамической, поэтому этот код бесполезен.

2
Комментарии

Возможно, вы ищете это: http://stackoverflow.com/a/2293494

Asko Asko
16 янв. 2012 г. 14:24:14

dynamic_sidebar() при вызове делает одно из двух: либо выводит сайдбар (echo), либо возвращает false. Таким образом, if( !dynamic_sidebar() ) либо выведет сайдбар, либо выполнит какое-то резервное действие.

mor7ifer mor7ifer
16 янв. 2012 г. 15:46:01
Все ответы на вопрос 2
1
10

WordPress Widgets API — это механизм создания различных виджетов и регистрации сайдбаров.

При создании нового виджета можно использовать переменные, которые могут быть добавлены к любому виджету. Их значения берутся из аргументов функции register_sidebars.

args (строка/массив) (необязательно)
Создает сайдбар на основе значений 'name' и 'id'. По умолчанию: None
name - Название сайдбара.
id - Идентификатор сайдбара.
before_widget - HTML-код, добавляемый перед каждым виджетом.
after_widget - HTML-код, добавляемый после каждого виджета.
before_title - HTML-код, добавляемый перед каждым заголовком.
after_title - HTML-код, добавляемый после каждого заголовка.

Пример:

<?php
    add_action( 'widgets_init', 'prefix_register_sidebars' ); 
    function prefix_register_sidebars() {
         $args = array(
         'name' => 'Мой сайдбар',
         'id'   => 'my-sidebar',
         'before_widget' => '<div id="%1$s" class="widget %2$s">',,
         'after_widget'  => '</div><hr />',
         'before_title'  => '<h5 class="widgettitle">',
         'after_title'   => '</h5>'
         );
      register_sidebars( $args );
   }

Пример виджета:

class MY_Widget extends WP_Widget {
    function my_widget( $args, $instance ) {
         $widget_ops = array(
         'description' => 'Описание моего виджета'
         );
        parent::WP_Widget(false, 'Название моего виджета', $widget_ops );
    }
    function widget() { // Управляет отображением виджета
    $title = 'Заголовок моего виджета';

    echo $before_widget;  // Выводит настройку 'before_widget' из register_sidebars
    echo $title;         // Будет обернуто в настройки 'before_title' и 'after_title'
    echo '<p>Это вывод моего виджета</p>';
    echo $after_widget;  // Выводит настройку 'after_widget'
    }
}
add_action( 'widgets_init', 'prefix_register_widgets' );
function prefix_register_widgets() {
    register_widget( 'my_widget' );
}
17 янв. 2012 г. 07:56:27
Комментарии

куда мне поместить этот класс в моей дочерней теме?

shorif2000 shorif2000
20 окт. 2014 г. 18:05:29
0

это в файле functions.php

function twentyeleven_widgets_init() {

register_widget( 'Twenty_Eleven_Ephemera_Widget' );

register_sidebar( array(
    'name' => __( 'Главная боковая панель', 'twentyeleven' ),
    'id' => 'sidebar-1',
    'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    'after_widget' => "</aside>",
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
) );
16 янв. 2012 г. 14:37:05