Как добавить определенный виджет только на 1 страницу?

22 дек. 2012 г., 11:01:11
Просмотры: 47.2K
Голосов: 7

Я хотел бы показывать виджет только на одной странице моего сайта. Насколько я понимаю, это невозможно?

Должен ли я добавлять его на все страницы моего сайта или нет?

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

Это пользовательская тема или пользовательский виджет?

fuxia fuxia
22 дек. 2012 г. 15:56:51

пользовательская тема, FashionStyle от SMthemes dot com

Filippo oretti Filippo oretti
22 дек. 2012 г. 16:47:09

Настройки отображения виджетов Ещё один плагин, который это делает

User User
18 апр. 2013 г. 03:31:51

Это возможно. Самый простой способ — использовать плагин, такой как http://wordpress.org/extend/plugins/display-widgets/

Mridul Aggarwal Mridul Aggarwal
22 дек. 2012 г. 12:00:40

Вот лучшее решение, которое работает с любой темой и легко настраивается: http://wordpress.stackexchange.com/questions/127111/display-custom-homepage-text-based-on-domain/128354#128354

Brad Dalton Brad Dalton
2 янв. 2014 г. 20:34:48
Все ответы на вопрос 4
0

Это зависит от того, где вы хотите отображать виджет.

Начнем с регистрации области виджетов (сайдбара):

add_action( 'wp_loaded', 'wpse_76959_register_widget_area' );
function wpse_76959_register_widget_area()
{
    register_sidebar(
        array (
            'name'          => __(
                'Виджеты на странице Пример Страницы',
                'theme_textdomain'
                ),
            'description'   => __(
                'Будет использоваться только на странице с ярлыком "sample-page".',
                'theme_textdomain'
                ),
            'id'            => 'sample-only',
            'before_widget' => '<div id="sample-only-widget">',
            'after_widget'  => '</div>',
            'before_title'  => '<h2>',
            'after_title'   => '</h2>',
        )
    );
}

Это довольно просто. Мы регистрируем новую область виджетов с пользовательской разметкой.

Введите описание изображения

Теперь нам нужно где-то отобразить её. Мы можем добавить пользовательское действие в наш шаблон page.php:

do_action( 'show_sample_widget' );

Или мы можем использовать существующее действие, что ограничит места, где виджет будет доступен. Например, действие loop_start вызывается при первом вызове the_post() в цикле. Если мы хотим разместить виджет над содержимым страницы, мы используем этот хук:

add_action( 'loop_start', 'wpse_76959_render_widget' );

function wpse_76959_render_widget()
{
    is_page( 'sample-page' ) && dynamic_sidebar( 'sample-only' );
    remove_action( current_filter(), __FUNCTION__ );
}

Для пользовательского действия мы бы использовали:

add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
22 дек. 2012 г. 17:14:34
0

Существует несколько плагинов, которые позволяют отображать виджеты на основе определенных условий:

  • Display Widgets: Чистый и простой интерфейс
  • Widget Context: Имеет немного больше опций по сравнению с предыдущим
  • Dynamic Widgets: Наиболее функциональный из всех
  • Widget Logic: Предназначен для программистов, так как требует написания условий на PHP-коде. Например: is_page('about')

Альтернативное решение предлагает следующий плагин, который позволяет определить индивидуальный набор виджетов для каждой страницы прямо из экрана редактирования:

22 дек. 2012 г. 20:25:03
2

Если вам удобно редактировать файлы шаблонов вашей темы:

Найдите место, где вызывается

dynamic_sidebar('side_bar_name');

и либо до, либо после него, или практически в любом месте вашего сайта используйте:

$pageTitle =  get_the_title($post->ID); 
$targetPage = 'здесь укажите заголовок страницы, на которую хотите нацелиться';

    if($pageTitle == $targetTitle){    
     the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
    }
   //the_widget() вызывает конкретный виджет и отображает его

Если хотите сделать это более аккуратно: Создайте функцию в functions.php, которая будет выглядеть так:

function call_my_widget( $post ){
    $pageTitle =  get_the_title($post->ID); 
    $targetPage = 'здесь укажите заголовок страницы, на которую хотите нацелиться';

        if($pageTitle == $targetTitle){    
         the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
        }
}

Вызовите функцию с помощью:

call_my_widget( $post );

это должно вызываться в цикле или там, где существует глобальная переменная $post.

Затем вызовите эту функцию в вашем файле шаблона (например, page.php), чтобы отображать целевые виджеты только на целевой странице.

9 июл. 2013 г. 16:30:35
Комментарии

что такое $instance здесь..?

Ari Ari
5 дек. 2014 г. 12:51:00

Из документации WP: $instance (array|string) (опционально) Настройки экземпляра виджета. Может быть массивом или строкой в формате запроса. Примеры смотрите в описании каждого виджета. В моем случае это был пустой массив.

Vigs Vigs
25 дек. 2014 г. 06:29:30
0

Вы можете использовать хук widget_display_callback: https://developer.wordpress.org/reference/hooks/widget_display_callback/ и просто изменить ID страницы в коде ниже.

// Функция для кастомного отображения виджета
function custom_display_callback( $instance, $widget, $args ){
    // Если это страница с ID 10, не отображаем виджет
    if( is_page( 10 ) ){
        return false;
    }
    return $instance;
}
// Добавляем фильтр с приоритетом 50 и 3 параметрами
add_filter( 'widget_display_callback', 'custom_display_callback', 50, 3 );

Надеюсь, это поможет. Удачи!

11 сент. 2017 г. 10:18:39