web-dev-qa-db-ja.com

ページリストの階層に「ダミー」の親ページを作成しますか?

"ダミー"ページを設定することは可能ですか - ページリストに表示されるページタイトルと、編集不可能でスラッグがないページだけですか?

どこからコードを始めたらいいのかわからないし、最良の方法を判断できないので、これはより架空の質問です。

このような親子階層をページリストに設定して、子ページが親の下に入るよ​​うにしたいのですが、親ページは単なるプレースホルダであり、実際のページではありません。

その理由は、WordPressの経験があまりないユーザーにとっては、特に関連ページがページリストにもっと整理されるように、親子階層でページを整理するのに役立ちます。子ページが親の下に編成されている場合、ユーザーはメニューの作成も視覚化できます。問題は、親ページが編集可能であり、確立されたページコンテンツの一部ではないことです。私の経験では、これはユーザーの混乱を招きます。

特定のページのエディタを削除したり、robots.txtのentiresを使用してダミーの親にインデックスを付けないようにすることはできますが、新しい親に変更することを意味します。その親ページは、たとえウィットがブロックされていても、まだスラグを持っています

それでは、ページタイトルを作成し、子ページを割り当てることはできるが、親ページを開くことができない、編集できない、スラッグがない関数を作成する方法はありますか?

enter image description here

6
markratledge

ここで私の試みはOKです、それはかなりハックであり、そして最終的に私は親アイテムのリンク/色を削除することができませんでした、しかし親リンクはうまくいかないでしょう。

まず、次のパラメータを設定してCPTを作成します。

$args = array( 
        'hierarchical'        => true,
        'public'              => false,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'capability_type'     => 'post', 
        'supports'            => array( 'title','page-attributes' ),
    );

必要に応じて残りを記入してください。これは管理者には表示されるがフロントエンドには表示されない親投稿/ページを持つことを可能にします、それはまたpage-attributesによる親機能を可能にします。

これで、親に対する小さな "edit"、 "view"、および "trash" のリンクを削除するフィルタを投入できます。

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#として表示されますが、子供たちは大丈夫です。

欠点は、親項目がまだ黒いテキストではなく青いリンクになることです。WP List Tableを拡張せずに、リンクをタイトルから削除したり、javascriptを使用してカスタムCSSを追加したりする簡単な方法は見つかりません。

the_titleフィルタを使用して親タイトルを変更することはもちろん可能ですが、上記の条件でNULLに設定しても< a href=..>が表示されます。

また、is_post_type_hierarchicalフィルターを使用するだけで、これらすべてを行う簡単な方法があるかもしれません。

テーブルクラスへのGithubリンク タイトルのコード。

2
Wyck