Как изменить набор ссылок в мета-виджете WordPress

Как изменить набор ссылок в мета-виджете WordPress

В WP есть по дефолту встроенный виджет, с названием «Мета». Функционал данного виджета не замысловат. Он отображает набор ссылок, динамически меняющихся в зависимости от статуса пользователя в системе. Т.е. авторизирован пользователь или нет. Данный виджет отображает следующие ссылки — управление сайтом (или регистрация), войти (или выйти), RSS записей, RSS комментариев, WordPress.org.

В одной из своих работ, мне нужно было ограничить количество ссылок в меню. При этом, оставив лишь первые две — регистрация и вход. А остальные три — RSS + WP убрать за ненадобностью.

Подумал я, да тут работы минут на пять. Ошибся, на 15)… Ладно. Для решения данной задачи, я ожидал что в WordPress предоставляет готовый фильтр, используя который, можно будет фильтровать а возможно даже и добавлять нужные ссылки в данный Meta-виджет. А оказалось что нет.

Что бы решить данную задачу, в исходных кодах ВП пришлось отыскать код данного виджета, выполнить копи-паст переименовав названия класса и ID виджета.

Предупреждение
Никогда не изменяйте код самого движка WordPress, так как при следующем обновлении CMS, все ваши изменения будут перезаписаны на дефолтные.

PHP код родного мета-виджета можно найти по следующему пути — wp-includes/widgets/class-wp-widget-meta.php. Далее, мы можем или скопировать код виджета, вставив его в файл functions.php нашей темы. Или скопировать сам файл, сохранив его в нашей теме, и через PHP функцию «include_once» подключить его.

По дефолту, виджет имеет название «WP_Widget_Meta», и что бы не было конфликтов названий классов, давайте переименуем названия нашего виджета на другой. К примеру «My_Widget_Meta».

Важно
Используйте уникальные названия для классов и функций ваших тем или плагинов. В противном случае, WordPress может отображать ошибки или вообще перестать работать. Что бы на 100% исключить данную ситуацию, помещайте объявления ваших классов в оператор if с проверкой наличия класса в системе через функцию «class_exists», а для функции через «function_exists».

Далее, в конструкторе заменим:

parent::__construct( 'meta', __( 'Meta' ), $widget_ops );

На:

parent::__construct( 'my_meta', 'My Meta', $widget_ops );

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

А весь код метода «widget()», заменим на следующий, исключив из него html разметку RSS ссылок и копирайт на движок WP:

public function widget( $args, $instance ) {
	$title = ! empty( $instance['title'] ) ? $instance['title'] : __( 'Meta' );

	/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
	$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

	echo $args['before_widget'];

	if ( $title ) {
		echo $args['before_title'] . $title . $args['after_title'];
	}
		?>
		
<ul>
			<?php wp_register(); ?>
			
<li><?php wp_loginout(); ?></li>

		</ul>

		<?php

	echo $args['after_widget'];
}

Сохраняем файл, переходим в раздел «Внешний вид → Виджеты». Смотрим, наш виджет появился. Теперь его можно разместить в нужном для нас сайтбаре, и посмотреть результат на фронте.

Да… как говорят — хорошая мысль появляется после. Так и сейчас, а почему я просто не наследовал свой виджет от «WP_Widget_Meta» и не переопределил метод «widget()» с конструктором?

Как изменить набор ссылок в мета-виджете WordPress
Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *