Wie kann ich die Schaltfläche "Neu hinzufügen" in meinem benutzerdefinierten Beitragstyp entfernen?

9

Ich habe viele benutzerdefinierte Beitragstypen, die die Funktion "[benutzerdefinierten Beitragstyp] hinzufügen" benötigen, aber ich habe den benutzerdefinierten Beitragstyp "Info" und muss nicht "Neu" zum benutzerdefinierten Beitragstyp hinzufügen hinzufügen. Daher möchte ich die Schaltfläche oben entfernen, auf der "Hinzufügen über" steht.

Das ist was ich meine:

Geben Sie hier die Bildbeschreibung ein

Irgendeine Idee, wie ich das entfernen kann?

Lucas Santos
quelle

Antworten:

5

Siehe unten :

function disable_new_posts() {
    // Hide sidebar link
    global $submenu;
    unset($submenu['edit.php?post_type=CUSTOM_POST_TYPE'][10]);

    // Hide link on listing page
    if (isset($_GET['post_type']) && $_GET['post_type'] == 'CUSTOM_POST_TYPE') {
        echo '<style type="text/css">
        #favorite-actions, .add-new-h2, .tablenav { display:none; }
        </style>';
    }
}
add_action('admin_menu', 'disable_new_posts');
Helfende Hände
quelle
Vielen Dank, ich schätze es wirklich, nur eine weitere Frage zum Code. Kann es verwendet werden, um andere Elemente auf derselben Seite zu entfernen? wie zum Beispiel die "Suche über" zum Ritus.
Lucas Santos
Ja, aber dafür müssen Sie die erforderlichen Elemente im Code ändern.
Helping Hands
33

Eine schönere Lösung wäre, die Möglichkeit zum Erstellen eines custom_post_type zu deaktivieren:

Übergeben Sie einfach den Parameter 'create_posts' => false im Capabilities-Array, wenn Sie register_post_type aufrufen .

$args = array(
        'label'               => __( 'Custom Post Type', 'text_domain' ),
        'description'         => __( 'Custom Post Type', 'text_domain' ),
        'labels'              => $labels,
        'supports'            => array( ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'map_meta_cap'        => true,
        'capability_type' => 'custom_post_type',
        'capabilities' => array(
            'create_posts' => false
        )
    );
    register_post_type( 'custom_post_type', $args );
TompaLompa
quelle
Gibt es einen Nachteil auf diese Weise? Dies scheint eine viel bessere Lösung zu sein, als nur die Links mit CSS zu verbergen.
Nick Young
Bestätigung, dass dies funktioniert! Dies sollte die akzeptierte Antwort sein, da sie nicht auf CSS-Hacks beruht.
Helgatheviking
1
Scheint nicht zu funktionieren 4.7.2... Außerdem. Es soll nicht einmal einen booleanWert akzeptieren . Es sollte ein stringWert von sein : do_not_allow.
Michael Ecklund
Keine bevorzugte Lösung. Manchmal sollten Sie nicht in der Lage sein, "Beiträge" ohne einen vorher festgelegten Kontext zu erstellen. Einige Dinge sind nur UX-Süßigkeiten und die Alternative, zu versuchen, Funktionen basierend auf dem Kontext im Administrator bereitzustellen, ist ein nicht wartbarer Albtraum.
Mark Kaplun
Es gibt einen verwandten WP-Fehler # 22895 ( core.trac.wordpress.org/ticket/22895 ), der dazu führt, dass die edit.php-Seite für das CPT nicht angezeigt wird, wenn im CPT-Admin-Untermenü nur der Menüpunkt "Alle Beiträge" angezeigt wird . Es gibt eine Problemumgehung dafür unter wordpress.stackexchange.com/questions/178033/… .
Jarnoan
3

Die Antwort von @ TompaLompa wurde bearbeitet, da sie unvollständig war. Das Hinzufügen create_posts => falsefunktioniert nicht, wenn map_meta_capes nicht auf gesetzt ist true.

Wenn Sie diesen Parameter nicht einstellen (oder auf setzen false), wird auch die Bearbeitung des Beitragstyps deaktiviert. Dies liegt daran, dass Sie edit_postjeder Benutzerrolle Funktionen hinzufügen müssen, um Ihren Beitragstyp hinzuzufügen UND zu bearbeiten .

Wenn Sie diesen Parameter festlegen, wird die interne Standard-Meta-Fähigkeitsbehandlung von WP verwendet und funktioniert für Sie, wenn Sie keine genauere Kontrolle über die Rollenfunktionen benötigen als die Standard-WP-Funktionen.

bynicolas
quelle
1

Wenn Sie dann nur Add New entfernen möchten und nicht verwenden custom_post_type, sollten Sie nicht verwenden 'capability_type' => 'custom_post_type'. Sie sollten diesen Code besser entfernen. Viel Glück :)

Die Demo ist also unten:

array(
'labels' => $member_labels,
'has_archive' => true,
'public' => true,
'hierarchical' => true, // like page
'rewrite' => array('slug' => 'member_pages'),
'supports' => array(
    'title',
    'editor',
    'excerpt',
    'custom-fields',
    'thumbnail',
    'page-attributes',
),
'taxonomies' => array('post_tag', 'cm_club'),
// 'capability_type' => 'custom_post_type',
'capabilities' => array(
    'create_posts' => false,
),
'map_meta_cap' => true,
)
Ni Xiaoni
quelle
0

Am besten habe ich das Plugin add-admin-javascript installiert und aktiviert. Gehen Sie dann zu den Einstellungen und fügen Sie Javascript hinzu. Schreiben Sie diesen Code in das letzte Feld

$('.wrap .wp-heading-inline').remove();
$('.wrap .page-title-action').remove();
$('#wp-admin-bar-new-content').remove();
Navesh Kintali
quelle