page_row_actions │ хук-фильтр │ WP 2.8.0

Click here to view original web page at wp-kama.ru

Позволяет изменить список действий со страницами в таблице страниц.

Фильтр применяется только для иерархических типов записей. Для плоских записей срабатывает фильтр post_row_actions.

Использование

$actions(string[])

Массив действий со страницей.

Array (
	[edit] => <a href="https://example.com/wp-admin/post.php?post=127&action=edit" aria-label="Редактировать «Архитектура»">Изменить</a>
	[inline hide-if-no-js] => <button type="button" class="button-link editinline" aria-label="Изменить свойства «Архитектура»" aria-expanded="false">Свойства</button>
	[trash] => <a href="https://example.com/wp-admin/post.php?post=127&action=trash&_wpnonce=5865cdb7e4" class="submitdelete" aria-label="Переместить «Архитектура» в корзину">Удалить</a>
	[view] => <a href="https://example.com/architecture/" rel="bookmark" aria-label="Посмотреть «Архитектура»">Перейти</a>
)

По умолчанию: are 'Edit', 'Quick Edit', 'Restore', 'Trash', 'Delete Permanently', 'Preview', and 'View'

$post(WP_Post)
Объект записи.

Примеры

0

#1 Запретим редактирование указанных страниц

Иногда возникает необходимость ограничить возможности редактирования определенных (указанных) страниц сайта для некоторых пользователей или групп пользователей. Сделать это можно по-разному, наверняка есть плагины для этого. Но в данной статье мы рассмотрим вариант с использованием небольшого кода, который позволит запретить редактирование отдельных страниц в WordPress.

Disable_Editing_Specified_Posts::init(
	[
		'remote-laboratories',
		'devboards',
		'history-risc-v',
		'about-risc-v',
	]
);

class Disable_Editing_Specified_Posts {

	private static array $disable_post_names = [];

	public static function init( array $disable_post_names ): void {
		self::$disable_post_names = $disable_post_names;

		add_action( 'current_screen', [ __CLASS__, 'disable_edit_static_pages' ] );
		add_filter( 'display_post_states', [ __CLASS__, 'set_state_for_static_pages' ], 9, 2 );
		add_filter( 'page_row_actions', [ __CLASS__, 'remove_page_row_actions' ], 10, 2 );
	}

	/**
	 * Мониторит открытие статичной страницы на редактирование и выводит предупреждение.
	 */
	public static function disable_edit_static_pages(): void {
		global $pagenow, $typenow;

		if ( 'post.php' === $pagenow && 'page' === $typenow && is_admin() ) {
			$post_id = $_GET['post'] ?? null;

			if ( $post_id && ( $post = get_post( $post_id ) ) ) {
				$text = [
					'<p>Эта страница статичная и не предполагает, чтобы в ней что-либо редактировали.</p>',
					'<p>Если Вам нужно что-то изменить, обратитесь к разработчикам сайта.</p>',
					sprintf( '<p><a href="%s">Вернуться обратно к списку страниц</a></p>', admin_url( 'edit.php?post_type=page' ) ),
				];

				if ( in_array( $post->post_name, self::$disable_post_names, true ) ) {
					wp_die( implode( '', $text ) );
				}
			}
		}
	}

	/**
	 * Добавляет статичным страницам лейбл об этом в таблице странице в админке.
	 */
	public static function set_state_for_static_pages( array $post_states, WP_Post $post ): array {
		if ( in_array( $post->post_name, self::$disable_post_names, true ) ) {
			$post_states[] = 'Редактируется через разработчиков';
		}

		return $post_states;
	}

	/**
	 * Удаляет действие "Изменить" со страницей в списке страниц.
	 */
	public static function remove_page_row_actions( array $actions, WP_Post $post ): array {
		if ( in_array( $post->post_name, self::$disable_post_names, true ) ) {
			unset( $actions['edit'] );
		}

		return $actions;
	}

}

Список изменений

С версии 2.8.0Введена.

Где вызывается хук

WP_Posts_List_Table::handle_row_actions()

quick_edit_enabled_for_post_type

page_row_actions

post_row_actions

wp-admin/includes/class-wp-posts-list-table.php 1580

$actions = apply_filters( 'page_row_actions', $actions, $post );

Где используется хук в WordPress

Использование не найдено.