clean_code
@clean_code
Программист-сис.админ

Как в WP разрешить чтение постов с другим статусом?

Доброе время суток.
Плагином Edit Flow был добавлен новый статус для поста "В архиве".
После того как пост его приобретает то становиться невозможным его прочтение незарегистрированному пользователю.
Как это возможно поправить. Что б его могли читать все?
И второй нюанс.
При запросе постоянной ссылки get_permalink() ссылка получает уже не ЧПУ а вида
?p=34611&post_type=object&preview_id=34611

Имеются ли методы борьбы с этим?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Плагин не плагин, а регистрируется post_status в конечном итоге с помощью функции register_post_status. Как и многие другие функции WP, она принимает ряд аргументов, в том числе такие:

public
(bool) (optional) Whether posts of this status should be shown in the front end of the site.
Default: false

internal
(bool) (optional) Whether the status is for internal use only.
Default: false

private
(bool) (optional) Whether the posts of this status should be accessible by their urls.
Default: false


Эти аргументы определяют, будет ли доступен данный статус на фронтенде и будут ли генерироваться ЧПУ. Скорее всего плагин конфигурирует их как приватные, поэтому они недоступны. Есть 3 варианта (возможных):

1. В самом плагине есть возможность перенастроить эти свойства под себя.
2. Плагин предоставляет фильтр, с помощью которого можно изменить эти аргументы.
3. Менять эти аргументы напрямую в определении статусов, через глобальный доступ (фильтрами тут WordPress, увы, не радует):

function make_archived_status_public()
{
	global $wp_post_statuses;

	// Меняем public на true
	$wp_post_statuses['archived']->public = true;

	// Повторяем для других аргументов, если нужно
	// ...
}
add_action( 'init', 'make_archived_status_public' );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
clean_code
@clean_code Автор вопроса
Программист-сис.админ
Вопрос со ссылками решился подставлением в href
echo str_replace("%object%", $post->post_name, get_post_permalink($post->ID, true));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы