Як змінити набір посилань у мета-віджеті WordPress

Як змінити набір посилань у мета-віджеті WordPress

У WordPress за замовчуванням є вбудований віджет з назвою «Мета». Функціонал цього віджета нескладний. Він відображає набір посилань, які динамічно змінюються залежно від статусу користувача в системі. Тобто, авторизований користувач чи ні. Цей віджет відображає такі посилання — керування сайтом (або реєстрація), увійти (або вийти), RSS записів, RSS коментарів, WordPress.org.

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

Подумав я, що ця задача — на п’ять хвилин. Помилився, вклалось у 15)… Добре. Для вирішення цієї задачі я сподівався, що WordPress надає готовий фільтр, за допомогою якого можна буде відфільтрувати або навіть додати потрібні посилання в цей Meta-віджет. Але виявилося, що ні.

Щоб вирішити це завдання, довелося знайти вихідний код цього віджета у самому WordPress, скопіювати його та перейменувати назви класу і 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-посилань і копірайт на WordPress:

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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *