Wie kann ich im Abschnitt "Seitenattribut" in wp-admin für Seiten ein zusätzliches Attribut hinzufügen?

8

Ich möchte eine Auswahlliste in das Page AttributeFeld einfügen, das Sie rechts in der Administrationsoberfläche für Seiten sehen.

Weiß jemand, ob das möglich ist?

Oder fügen Sie zumindest ein benutzerdefiniertes Feld unter diesem Feld hinzu?

Steven
quelle

Antworten:

14

Es gibt keine praktischen Haken, um dieser Box etwas hinzuzufügen.

Sie könnten eines von zwei Dingen tun.

1. Fügen Sie eine neue Meta Box hinzu

Sie tun dies, indem Sie sich an die add_meta_boxesAktion anschließen und anrufen add_meta_box. Sie können in Ihrem Aufruf von add_meta_box eine Rückruffunktion angeben. Dieser Rückruf sorgt dafür, dass Ihre Auswahlliste wiedergegeben wird.

<?php
add_action( 'add_meta_boxes', 'wpse44966_add_meta_box' );
/**
 * Adds the meta box to the page screen
 */
function wpse44966_add_meta_box()
{
    add_meta_box(
        'wpse44966-meta-box', // id, used as the html id att
        __( 'WPSE 44966 Meta Box' ), // meta box title, like "Page Attributes"
        'wpse44966_meta_box_cb', // callback function, spits out the content
        'page', // post type or page. We'll add this to pages only
        'side', // context (where on the screen
        'low' // priority, where should this go in the context?
    );
}

/**
 * Callback function for our meta box.  Echos out the content
 */
function wpse44966_meta_box_cb( $post )
{
    // create your dropdown here
}

2. Entfernen Sie das Meta-Feld Standard-Seitenattribute und fügen Sie Ihre eigene Version hinzu

Der gesamte Inhalt des Post-Editing-Bildschirms mit Ausnahme des Haupteditors und des Titelbereichs ist eine Meta-Box. Sie können sie entfernen, indem Sie anrufen remove_meta_box, und sie dann durch Ihre eigenen ersetzen.

Ändern Sie daher zunächst die obige Funktion zum Hinzufügen, um einen Aufruf zum Entfernen von Meta-Boxen einzuschließen. Dann müssen Sie den page_attributes_meta_boxFunktionskörper von kopieren wp-admin/includes/meta-boxes.phpund Ihre Daten darunter ablegen.

<?php
add_action( 'add_meta_boxes', 'wpse44966_add_meta_box' );
/**
 * Adds the meta box to the page screen
 */
function wpse44966_add_meta_box( $post_type )
{
    // remove the default
    remove_meta_box(
        'pageparentdiv',
        'page',
        'side'
    );

    // add our own
    add_meta_box(
        'wpse44966-meta-box',
        'page' == $post_type ? __('Page Attributes') : __('Attributes'),
        'wpse44966_meta_box_cb', 
        'page', 
        'side', 
        'low'
    );
}

/**
 * Callback function for our meta box.  Echos out the content
 */
function wpse44966_meta_box_cb( $post )
{
    // Copy the the `page_attributes_meta_box` function content here
    // add your drop down
}

In jedem Fall müssen Sie sich einbinden save_post, um den Wert Ihres Feldes mit add_post_metaund / oder zu speichern update_post_meta.

<?php
add_action( 'save_post', 'wpse44966_save_post' );
/**
 * Save our custom field value
 */
function wpse44966_save_post( $post_id )
{
    // check nonces, permissions here
    // save the data with update_post_meta
}

Dieses Tutorial könnte Ihnen helfen.

chrisguitarguy
quelle
Danke für eine tolle Antwort. Ich hatte auf eine Art Haken gehofft, aber das wird gut gehen :)
Steven
ausgezeichnete Lösung und gute vollständige Antwort - Referenzlink füllt die Lücken - danke
Q Studio
2
Ab WordPress 4.9 gibt es einen Aktions-Hook page_attributes_misc_attributes, der direkt nach dem Feld "Reihenfolge" und kurz vor dem Hilfetext am unteren Rand dieser Meta-Box ausgelöst wird und die Erweiterung der Meta-Box ermöglicht, anstatt sie ersetzen zu müssen. Es wird ein einzelnes Argument übergeben, $ post, das Objekt des aktuellen Posts.
Andy Macaulay-Brook