Добавьте пользовательский идентификатор элемента в зависимости от места размещения виджета, боковой панели или нижнего колонтитула


Я создаю пользовательский виджет и хочу вернуть другой идентификатор элемента. Идентификатор будет примерно таким: instafeed-sidebar и instafeed-footer. Это зависит от того, где добавлен виджет.

Боковые панели регистрации:

register_sidebar( array(
    'name'          => esc_html__( 'Post Sidebar', 'nubia' ),
    'id'            => 'post-sidebar',
    'description'   => esc_html__( '', 'nubia' ),
    'before_widget' => '<section id="%1$s" class="c-widget c-widget--sidebar %2$s">',
    'after_widget'  => '</section>',
    'before_title'  => '<h5 class="c-widget--sidebar__title">',
    'after_title'   => '</h5>',
  ) );

  register_sidebar( array(
    'name'          => esc_html__( 'Footer First', 'nubia' ),
    'id'            => 'footer-first',
    'description'   => esc_html__( '', 'nubia' ),
    'before_widget' => '<section id="%1$s" class="c-widget c-widget--footer %2$s">',
    'after_widget'  => '</section>',
    'before_title'  => '<h5 class="c-widget--footer__title">',
    'after_title'   => '</h5>',
  ) );

Код виджета:

public function widget( $args, $instance ) {
  extract($args);

  // ...

  <div id='instafeed' class='c-widget-instagram'></div>

  <?php

  echo $after_widget;
}

Я не хочу использовать динамический идентификатор виджета, а скорее идентификатор, который я выбираю.

Таким образом, если бы виджет был добавлен на зарегистрированную боковую панель, элемент был бы:

<div id='instafeed-sidebar' class='c-widget-instagram'></div>

Если виджет добавлен в нижний колонтитул, элемент было бы:

<div id='instafeed-footer' class='c-widget-instagram'></div>

Спасибо,

Author: Ahmad Ajmi, 2018-04-08

1 answers

Решил эту проблему, следуя совету @mmm. Использование $args["id"] сделало свое дело.

Использование $args["id"] вернет следующее:

post-sidebar

footer-first

С небольшим изменением мой окончательный код таков:

public function widget( $args, $instance ) {
  extract($args);

  // ...

  <div id='instafeed-<?php echo explode("-", $args["id"])[0] ;?>' class='c-widget-instagram'></div>

  <?php

  echo $after_widget;
}

Результат таков:

<div id='instafeed-post' class='c-widget-instagram'></div>
<div id='instafeed-footer' class='c-widget-instagram'></div>

Спасибо

 2
Author: Ahmad Ajmi, 2018-04-09 09:19:02