Создать "фиктивную" родительскую страницу для иерархии в списке страниц?


Можно ли настроить "фиктивную" страницу - просто заголовок страницы, который отображается в списке страниц, и страницу, которая недоступна для редактирования и не имеет слизняка?

Это скорее гипотетический вопрос, так как я не знаю, с чего начать с кода или определить наилучший путь.

Я хотел бы иметь возможность настроить такую иерархию родитель/потомок в списке страниц, чтобы дочерние страницы попадали под родительскую, но родительская страница - это просто заполнитель, а не настоящая страница.

Причина: для пользователей, не имеющих большого опыта работы с WordPress, полезно организовывать страницы в иерархии "родитель/потомок", особенно если страниц много, чтобы связанные страницы были более упорядочены в списке страниц. Пользователи также могут визуализировать создание меню, если дочерние страницы организованы под родительским. Проблема в том, что родительская страница может быть редактируемой, а не частью установленного содержимого страницы, и, по моему опыту, это приводит к путаница пользователей.

Я могу использовать функцию для удаления редактора для определенной страницы и использовать целые страницы в robots.txt чтобы не индексировать фиктивного родителя, но это означает изменение их для нового родителя. И на этой родительской странице все еще есть пуля, даже если она заблокирована

Итак, есть ли способ создать функцию, которая создает заголовок страницы и с возможностью назначать дочерние страницы, но при этом родительская страница не открывается, не редактируется и не имеет слизняка?

enter image description here

Author: markratledge, 2013-04-12

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 на класс таблицы код заголовка.

 2
Author: Wyck, 2013-04-12 23:52:05