Создать "фиктивную" родительскую страницу для иерархии в списке страниц?
Можно ли настроить "фиктивную" страницу - просто заголовок страницы, который отображается в списке страниц, и страницу, которая недоступна для редактирования и не имеет слизняка?
Это скорее гипотетический вопрос, так как я не знаю, с чего начать с кода или определить наилучший путь.
Я хотел бы иметь возможность настроить такую иерархию родитель/потомок в списке страниц, чтобы дочерние страницы попадали под родительскую, но родительская страница - это просто заполнитель, а не настоящая страница.
Причина: для пользователей, не имеющих большого опыта работы с WordPress, полезно организовывать страницы в иерархии "родитель/потомок", особенно если страниц много, чтобы связанные страницы были более упорядочены в списке страниц. Пользователи также могут визуализировать создание меню, если дочерние страницы организованы под родительским. Проблема в том, что родительская страница может быть редактируемой, а не частью установленного содержимого страницы, и, по моему опыту, это приводит к путаница пользователей.
Я могу использовать функцию для удаления редактора для определенной страницы и использовать целые страницы в robots.txt чтобы не индексировать фиктивного родителя, но это означает изменение их для нового родителя. И на этой родительской странице все еще есть пуля, даже если она заблокирована
Итак, есть ли способ создать функцию, которая создает заголовок страницы и с возможностью назначать дочерние страницы, но при этом родительская страница не открывается, не редактируется и не имеет слизняка?
1 answers
Хорошо, вот моя попытка, она довольно банальная, и в конце концов я не смог удалить ссылку/цвет родительского элемента, но родительская ссылка не будет работать.. так что это вроде как работает.
Сначала создайте CPT со следующим набором параметров:
$args = array(
'hierarchical' => true,
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'supports' => array( 'title','page-attributes' ),
);
Заполните остальное по мере необходимости, это позволит вам создать родительский пост/страницу, которая отображается в администраторе, но не на переднем плане, а также позволяет использовать родительские функции через page-attributes
.
Теперь мы можем добавить фильтр, который удаляет небольшие ссылки "редактировать", "просмотр" и "корзина" для родительского элемента.
function wpse_95518($actions) {
global $post;
//rename this to your CPT
if ($post->post_type =="parent"){
// check if it's a parent
if ( ! (is_post_type_hierarchical('parent') && $post->post_parent )) {
unset( $actions['inline hide-if-no-js']);
unset( $actions['trash'] );
unset( $actions['view'] );
unset( $actions['edit'] );
}
return $actions;
}
return $actions;
}
add_filter('page_row_actions', 'wpse_95518');
Теперь все становится немного странным, чтобы удалить функцию ссылки на родительский заголовок для редактирования поста.
function wpse_removetitle_95518($action){
global $post;
if ($post->post_type =="parent"){
if ( is_post_type_hierarchical('parent') && $post->post_parent ) {
return $action;
}else{
return '#'; //just in case
}
}
return $action;
}
add_filter( 'get_edit_post_link', 'wpse_removetitle_95518');
Теперь родительские элементы CPT не должны редактироваться по ссылкам в администраторе, они будут отображаться как edit.php?post_type=parent#
, но с дочерними элементами все будет в порядке.
Недостатком является то, что родительский элемент по-прежнему будет синей ссылкой вместо черного текста, я не смог найти простого способа удалить ссылку из заголовка или добавьте пользовательский CSS, чтобы сделать это с помощью javascript, не расширяя WP List Table
.
Вы, конечно, можете изменить родительский заголовок с помощью фильтра the_title
, но даже установка его в NULL
с помощью приведенного выше условия все равно показывает < a href=..>
Также может быть более простой способ сделать все это, просто используя фильтр is_post_type_hierarchical
.
Ссылка на Github на класс таблицы код заголовка.