Удаление <div class="textwidget"> из текстового виджета

12 июн. 2012 г., 18:25:30
Просмотры: 20.1K
Голосов: 3

Когда вы добавляете текстовый виджет в сайдбар WordPress, виджет включает этот код

<div class="textwidget">

Как мне удалить это без редактирования ядра?

К сведению - я думаю, эта строка находится здесь: wp-includes/default-widgets.php (строка 383)

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

Зачем вам это делать? Виджеты могут иметь конкретные ID.

Wyck Wyck
12 июн. 2012 г. 19:31:18

Я использую jQuery box с крутыми эффектами вместе с этим текстовым приложением, поэтому div немного портит CSS. Если бы был простой способ убрать его, это сэкономило бы мне кучу времени :)

Demilio Demilio
12 июн. 2012 г. 20:14:32

Самый простой способ убрать его — использовать метод jQuery .remove.

Wyck Wyck
12 июн. 2012 г. 20:34:22

И не могли бы вы объяснить, как? :)

Demilio Demilio
13 июн. 2012 г. 01:28:35

Лучше использовать jQuery для удаления div после того, как пересоздать чистый виджет с точно такой же функциональностью, которая вам нужна?

MZAweb MZAweb
13 июн. 2012 г. 04:21:21

Разве jQuery box не добавляет дополнительные CSS-классы или разметку, которые потом можно использовать для написания CSS-селекторов, отменя стилизацию текстового виджета?

Tom J Nowell Tom J Nowell
2 окт. 2012 г. 22:54:12

Помимо использования JavaScript или создания собственного пользовательского текстового виджета, в настоящее время нет способа удалить div с классом textwidget.

henrywright henrywright
2 нояб. 2016 г. 02:09:44
Показать остальные 2 комментариев
Все ответы на вопрос 5
0

Хорошо, попытка удалить с помощью jQuery противоречит интуитивному подходу.

Изменение через буферизацию вывода неэффективно.

И нам не следует редактировать сам код виджета, так как изменения будут потеряны при следующем обновлении WordPress.

Я бы предложил либо создать собственный текстовый виджет, либо просто расширить и модифицировать существующий виджет WordPress следующим образом (поместите следующий код в файл functions.php):

add_action( 'widgets_init', 'register_my_widgets' );


function register_my_widgets() {
    ...
    register_widget( 'My_Text_Widget' );
}

class My_Text_Widget extends WP_Widget_Text {
    function widget( $args, $instance ) {
        extract($args);
        $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
        $text = apply_filters( 'widget_text', empty( $instance['text'] ) ? '' : $instance['text'], $instance );
        echo $before_widget;
        if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?>
            <?php echo !empty( $instance['filter'] ) ? wpautop( $text ) : $text; ?>
        <?php
        echo $after_widget;
    }
}
13 дек. 2014 г. 01:57:05
2

Если вам нужно удалить сам div с классом textwidget, но оставить его содержимое, вот простой способ с использованием jQuery:

$('.textwidget').replaceWith($('.textwidget').contents());
2 окт. 2012 г. 22:35:52
Комментарии

Это абсолютно не то, что следует делать во фронтенде…

feeela feeela
22 июн. 2015 г. 12:59:43

@feela не могли бы вы, пожалуйста, подробнее раскрыть свой комментарий и лучше объяснить, в чем проблема с ответом?

Rarst Rarst
22 июн. 2015 г. 23:13:51
1
-1

Как упомянуто в комментарии, в данном случае вероятно лучше просто удалить или заменить имя класса с помощью jQuery, а не использовать PHP-функцию, так как этот класс в любом случае жестко задан.

Чтобы удалить его:

jQuery('.textwidget').remove();

Чтобы скрыть через CSS:

jQuery('.textwidget').css('display', 'none');

Чтобы изменить имя класса:

jQuery('.textwidget').attr('class', 'newName');
13 июн. 2012 г. 18:53:07
Комментарии

Это, скорее всего, удалит класс, верно? Но проблема здесь в div

Demilio Demilio
17 июн. 2012 г. 01:38:14
1
-3
```html

You can use output buffering (http://php.net/manual/es/book.outcontrol.php) to get the whole generated page in a variable and remove the offending before echoing.

But it seems overly complicated for this case. You can just copy all the widget code and create a new widget (in a plugin or your functions.php) without that hardcoded div. It's really not that much code.

Also, any reason to remove that div that can not be solved in css?

```
12 июн. 2012 г. 18:46:33
Комментарии

Почему минусы? Есть ли лучшее решение?

MZAweb MZAweb
13 июн. 2012 г. 04:20:31
2
-3
  1. Отредактируйте файл: /wp-includes/widgets/class-wp-widget-text.php
  2. Найдите и удалите: <div class="textwidget"> и </div>
  3. Готово!
15 янв. 2017 г. 13:11:25
Комментарии
  1. Смотрите, как ваши изменения перезаписываются сразу после следующего обновления WordPress. 5. Поймите, почему не следует изменять основные файлы.
fuxia fuxia
15 янв. 2017 г. 18:26:37

Вы никогда не должны изменять основные файлы WordPress, если можете этого избежать.

Jay Jay
22 окт. 2017 г. 20:00:12