Eine übergeordnete "Dummy" -Seite für eine Hierarchie in der Seitenliste erstellen?

7

Ist es möglich, eine "Dummy" -Seite einzurichten - nur einen Seitentitel, der in der Seitenliste angezeigt wird, und eine Seite, die nicht bearbeitet werden kann und keinen Slug enthält?

Dies ist eher eine hypothetische Frage, da ich nicht weiß, wo ich mit Code beginnen oder den besten Weg bestimmen soll.

Ich möchte die Option haben, eine solche übergeordnete / untergeordnete Hierarchie in der Seitenliste so einzurichten, dass die untergeordneten Seiten unter die übergeordnete Seite fallen, aber die übergeordnete Seite ist nur ein Platzhalter und keine echte Seite.

Der Grund: Für Benutzer ohne viel Erfahrung in WordPress ist es hilfreich, Seiten in einer übergeordneten / untergeordneten Hierarchie zu organisieren - insbesondere wenn viele Seiten vorhanden sind -, damit verwandte Seiten in der Seitenliste besser organisiert sind. Benutzer können auch das Erstellen eines Menüs visualisieren, wenn untergeordnete Seiten unter einem übergeordneten Element organisiert sind. Das Problem ist, dass die übergeordnete Seite bearbeitet werden kann und nicht Teil des festgelegten Seiteninhalts ist. Nach meiner Erfahrung führt dies zu Verwirrung bei den Benutzern.

Ich kann eine Funktion verwenden, um den Editor für eine bestimmte Seite zu entfernen und Entires in robots.txt zu verwenden, um das Dummy-Elternteil nicht zu indizieren, aber das bedeutet, diese für ein neues Elternteil zu ändern. Und diese übergeordnete Seite hat immer noch eine Schnecke, auch wenn sie mit Witz blockiert ist

Gibt es also eine Möglichkeit, eine Funktion zu erstellen, die einen Seitentitel erstellt und untergeordnete Seiten zuweisen kann, die übergeordnete Seite jedoch nicht geöffnet, nicht bearbeitet und nicht mit einem Slug versehen werden kann?

Geben Sie hier die Bildbeschreibung ein

markratledge
quelle
1
"... ein Seitentitel und mit der Fähigkeit, untergeordnete Seiten zuzuweisen, aber ist die übergeordnete Seite nicht zu öffnen, nicht zu bearbeiten und hat keinen Slug?" - klingt sehr nach einem benutzerdefinierten Beitragstyp.
s_ha_dum
Ich glaube nicht, dass es eine Möglichkeit gibt, die Schnecke zu entfernen. Ich habe vergessen, ob Sie es im Admin anzeigen, aber vor dem Front-End ausblenden können. Wenn ja, können Sie im Back-End Javascript verwenden, um den Link zu entfernen.
Wyck
Sie können versuchen, 'rewrite' => array('slug' => 'false'für das CPT zu setzen oder es auf /oder #, einen Versuch wert
Wyck
s_ha_dum und Wyck: CPT, gute Idee; Ich werde das untersuchen. Nicht-CPT-Seiten - normale WP-Seiten - können also Kinder eines CPT sein?
Markratledge
Ich denke nicht, ohne ein bisschen herumzuhacken.
Wyck

Antworten:

2

OK, hier ist mein Versuch, es ist ziemlich hackig und am Ende konnte ich den Link / die Farbe des übergeordneten Elements nicht entfernen, aber der übergeordnete Link wird nicht funktionieren. Also funktioniert es irgendwie.

Erstellen Sie zunächst ein CPT mit den folgenden Parametern:

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

Füllen Sie den Rest nach Bedarf aus. Auf diese Weise können Sie einen übergeordneten Beitrag / eine übergeordnete Seite erstellen, die im Administrator, jedoch nicht im Front-End angezeigt wird. Außerdem können übergeordnete Funktionen über aktiviert werden page-attributes.

Jetzt können wir einen Filter einfügen, der die kleinen Links "Bearbeiten", "Anzeigen" und "Papierkorb" für das übergeordnete Element entfernt.

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');

Jetzt wird es etwas unkonventionell, die übergeordnete Titellinkfunktion zum Bearbeiten des Beitrags zu entfernen.

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');

Jetzt sollten übergeordnete Elemente des CPT nicht über Links im Administrator bearbeitet werden können. Es wird angezeigt, aber die untergeordneten Elemente edit.php?post_type=parent#sind in Ordnung.

Der Nachteil ist, dass das übergeordnete Element immer noch ein blauer Link anstelle von schwarzem Text ist. Ich konnte keine einfache Möglichkeit finden, den Link aus dem Titel zu entfernen oder benutzerdefiniertes CSS hinzuzufügen, um dies über Javascript zu tun, ohne das zu erweitern WP List Table.

Sie können den übergeordneten Titel natürlich mithilfe des the_titleFilters ändern , aber selbst wenn Sie ihn NULLüber die obige Bedingung einstellen, wird weiterhin a angezeigt< a href=..>

Es könnte auch eine einfachere Möglichkeit geben, dies alles nur mit dem is_post_type_hierarchicalFilter zu tun .

Github-Link zum Tabellenklassencode für den Titel.

Wyck
quelle
Danke für all das; es wird geschätzt. Aber wenn Nicht-CPT-Seiten - normale WP-Seiten - keine Kinder eines CPT sein können, müsste ich die Seiten wahrscheinlich in CPTs ändern. Das, was ich jetzt getan habe, war, leere übergeordnete Seiten zu erstellen und sie in robots.txt zu blockieren. Verwenden Sie dann benutzerdefinierte Links im Menü mit http: // #, um die übergeordneten Elemente im Menü nicht zu verwenden.
Markratledge