Как добавить ссылки в заголовки виджетов WordPress?

28 апр. 2011 г., 14:38:28
Просмотры: 17.8K
Голосов: 5

Я использую три виджета, два из них - стандартные виджеты WordPress (Последние записи и Архивы), а третий - пользовательский виджет, который работает как Последние записи, но для определенного пользовательского типа записей.

Мой вопрос - как сделать заголовки виджетов кликабельными ссылками? Похоже, что WordPress не принимает HTML в поле заголовка и автоматически удаляет его. В идеале я не хочу использовать для этого плагин, хотя знаю, что существуют решения вроде Linkable Title HTML and PHP Widget. Но это не совсем то, что мне нужно.

Код моего пользовательского виджета можно посмотреть здесь: http://pastie.org/1847651

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

Ян, можешь включить код для виджета, который ты создал?

EAMann EAMann
29 апр. 2011 г. 18:44:36

Я только что обновил свой вопрос, добавив ссылку на код виджета. Хотя мне нужно добавить ссылки в заголовок этого пользовательского виджета, я также хотел бы добавить ссылки в стандартные виджеты "Последние записи" и "Архив", если это возможно.

Ian Young Ian Young
29 апр. 2011 г. 18:51:38

это работает отлично, спасибо, хотя я не могу найти свои простые текстовые виджеты в папке плагина. Я новичок во всем этом... где они могут находиться? Также, кто-нибудь знает, как преобразовать название категории (которое также служит заголовком в теме) в ссылку? Заранее спасибо. Жак

User User
6 мар. 2012 г. 08:12:03
Все ответы на вопрос 5
3

Делаем заголовок кликабельным

WordPress не позволяет передавать HTML-код в заголовке виджета, но у него есть удобные параметры $before_title и $after_title, которые можно использовать для манипуляций.

В вашем виджете просто добавьте первую часть ссылки (<a href="...">) в конец $before_title, а последнюю часть ссылки (</a>) в начало $after_title, и ваш заголовок автоматически станет ссылкой.

Это нужно делать после извлечения аргументов в методе widget()... так что в вашем коде найдите раздел:

ob_start();
extract($args);

$title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Staff News') : $instance['title'], $instance, $this->id_base);

И добавьте:

$before_title .= '<a href="http://something.com">';
$after_title = '</a>' . $after_title;

После этого ваш заголовок станет ссылкой!

Изменение стандартных виджетов

Вы не можете применить этот метод к стандартным виджетам напрямую, но есть обходной путь с использованием наследования объектов. Просто определите свои собственные пользовательские виджеты, которые расширяют стандартные виджеты:

class My_Widget_Recent_Posts extends WP_Widget_Recent_Posts {

}

Вам придется переопределить имя виджета и другие параметры в конструкторе, а затем переопределить метод widget(), скопировав существующий код, но применив наш трюк с $before_title/$after_title, описанный выше. Ваша новая версия стандартного виджета будет иметь кликабельные заголовки!

29 апр. 2011 г. 20:47:02
Комментарии

Это потрясающе, именно то, что мне было нужно! Мне удалось заставить виджет пользовательских типов записей работать с кликабельным заголовком ссылки, но когда дело доходит до расширения стандартного виджета Последние записи, я пока не добился успеха. Я расширил стандартный класс и зарегистрировал новый виджет, но он не отображается в панели виджетов. Код, который я добавил в файл functions.php: http://pastie.org/1848212

Ian Young Ian Young
29 апр. 2011 г. 21:47:05

Можете ли вы увидеть, где я допустил ошибку при расширении стандартного класса виджета? Я расширил класс, переименовал виджет в конструкторе и скопировал содержимое из стандартного виджета Последние записи. Ошибок не возникает, но виджет не появляется в панели виджетов. Я также зарегистрировал новый виджет.

Ian Young Ian Young
30 апр. 2011 г. 12:57:20

У вас есть $this->WP_Widget('recent-posts', __('My Recent News Posts'), $widget_ops); в конструкторе. Должно быть $this->WP_Widget('widget_my_recent_entries', __('My Recent News Posts'), $widget_ops);.

EAMann EAMann
30 апр. 2011 г. 19:54:54
1

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

http://justintadlock.com/archives/2009/05/26/the-complete-guide-to-creating-widgets-in-wordpress-28

http://churchco.de/the-complete-guide-to-writing-a-wordpress-widget/

Обычно это подразумевает создание плагина, который добавляет пользовательские виджеты на экран виджетов. Небольшая модификация существующего виджета сводится к копированию его кода и включению изменённой версии в ваш плагин.

Стандартные виджеты находятся в файле wp-includes/default-widgets.php

Примечание Если вы не знакомы с кодом WordPress, вам нужно решить, хотите ли вы разобраться в нём глубже. Если да, то вам потребуется добавить поле в форму виджета, позволяющее пользователю указать адрес ссылки, а также изменить код виджета так, чтобы ссылка добавлялась к заголовку при его выводе.

Если же вы не хотите углубляться в код, то, боюсь, вам не повезло. Виджеты не позволяют изменять свои возможности без модификации кода WordPress.

28 апр. 2011 г. 15:25:44
Комментарии

Я создал один виджет по этому примеру, но недостаточно хорошо знаком с кодом WP, чтобы понять, как изменить его для создания кликабельного заголовка. Есть предложения?

Ian Young Ian Young
28 апр. 2011 г. 16:06:27
0

Я только что выпустил плагин, который позволяет добавлять ссылку в настройках виджета. Он работает с большинством плагинов. Скачайте его здесь: http://wordpress.org/extend/plugins/widget-title-links/

21 дек. 2012 г. 20:17:38
1

На самом деле, вы МОЖЕТЕ разместить HTML-код прямо в заголовке. С небольшим количеством кода. Ознакомьтесь со статьёй, которая покажет вам как это сделать:

http://ponderwell.net/2011/05/how-to-use-html-in-wordpresss-widgets-title/

3 мар. 2012 г. 06:23:25
Комментарии

Добро пожаловать в WordPress Stack Exchange, Альфред! У нас есть полезный FAQ: Ответ должен быть чем-то большим, чем просто ссылка на внешний сайт. Не могли бы вы добавить базовое объяснение к вашему ответу?

fuxia fuxia
3 мар. 2012 г. 11:05:29
1
-1

Или вы можете просто использовать виджет с обычным текстом, который поддерживает HTML в содержимом, оставить заголовок пустым, а затем добавить в начало содержимого этого виджета...

<a href="yourlink"><div class="widget-title">Ваш заголовок</div></a>
30 нояб. 2012 г. 00:06:58
Комментарии

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

chrisguitarguy chrisguitarguy
30 нояб. 2012 г. 00:53:46