Keine Settings sichtbar bei MB Settings Page mit Tabs

round gold and white analog clock reading at 7:10
foto von phil desforges auf unsplash

Unter Anwendung der Metabox-Erweiterung MB Settings Page und Meta Box Tabs entwarf ich vor kurzem für eine mehrsprachgige Multisite-Umgebung über die visuelle Oberfläche Einstellungen, die sich auf mehrere Tabs aufteilen sollten, um dann den Code generieren zu lassen, in ein Plugin einzufügen, und global verfügbar zu haben.

Bevor in den Einstellungen einer Feldgruppe festgelegt werden kann, dass die Felder für Einstellungen vorgesehen sind, braucht es erstmal die Settingspage. Innerhalb einer neuen Settingspage können dann Tabs definiert werden. Jedes Tab bekommt einen „Key“ und einen „Value“. Der Schlüssel entspricht der ID (daher wenn möglich nur Kleinbuchstaben verwenden, ggf. Bindestriche), der Wert ist der Titel des Tabs.

Für jedes Tab wird später eine eigene Feldgruppe definiert. Das tat ich dann auch, generierte die Codes, und fügte sie in mein Plugin ein. Die „Settings Page“ war an der richtigen Stelle, und auch die Tab konnte ich sehen. Doch der Bereich in dem in den Tabs die Einstellungen zu sehen sein wollten, waren allesamt leer, obgleich die Einstellungen korrekt zugeordnet waren.

So sieht ein generiertes Code-Snippet aus, um eine Settings Page mit Tabs anzulegen.

add_filter( 'mb_settings_pages', 'product_cat_contents' );

function product_cat_contents( $settings_pages ) {

    $settings_pages[] = [
        'menu_title'    => __( 'Product Cat Contents', 'my-plugins-textdomain' ),
        'option_name'   => 'product_cat_contents',
        'position'      => 25,
        'parent'        => 'edit.php?post_type=product',
        'capability'    => 'edit_pages',
        'columns'       => 1,
        'tabs'          => [
            'cat-pdf'          => 'Category based PDFs',
            'cat-content-tabs' => 'Category based content tabs',
        ],
        'icon_url'      => 'dashicons-admin-generic',
    ];

    return $settings_pages;
}  

Das Snippet für das Tab cat-pdf

add_filter( 'rwmb_meta_boxes', 'pdf_files_based_on_categories' );

function pdf_files_based_on_categories( $meta_boxes ) {
    $prefix = 'myprefix_';  

    $meta_boxes[] = [
        'title'          => __( 'Product Category PDF Files', 'my-plugins-textdomain' ),
        'id'             => 'product-category-pdf-files',
        'settings_pages' => ['product-cat-contents'],
        'tab'            => 'cat-pdf',
        'fields'         => [
            [
                'name'       => __( 'Categories PDF', 'my-plugins-textdomain' ),
                'id'         => $prefix . 'categories_pdf',
                'type'       => 'group',
                'clone'      => true,
                'add_button' => __( 'new file', 'my-plugins-textdomain' ),
                'fields'     => [
                    [
                        'name'    => __( 'PDF Icon', 'my-plugins-textdomain' ),
                        'id'      => 'pdf_icon',
                        'type'    => 'image_select',
                        'options' => [
                            'icon-1' => plugins_url( 'assets/images/icon-1.png', dirname( dirname( __FILE__ ) ) ),
                            'icon-2' => plugins_url( 'assets/images/icon-2.png', dirname( dirname( __FILE__ ) ) ),
                            'icon-3' => plugins_url( 'assets/images/icon-3.png', dirname( dirname( __FILE__ ) ) ),
                            'icon-4' => plugins_url( 'assets/images/icon-4.png', dirname( dirname( __FILE__ ) ) ),
                            'icon-5' => plugins_url( 'assets/images/icon-5.png', dirname( dirname( __FILE__ ) ) ),
                            'icon-6' => plugins_url( 'assets/images/icon-6.png', dirname( dirname( __FILE__ ) ) )
                        ],
                        'columns' => 5,
                    ],
                    [
                        'name'    => __( 'PDF File', 'my-plugins-textdomain' ),
                        'id'      => 'pdf_file',
                        'type'    => 'file_advanced',
                        'columns' => 3,
                    ],
                    [
                        'name'       => __( 'Show in', 'my-plugins-textdomain' ),
                        'id'         => 'show_in',
                        'type'       => 'taxonomy_advanced',
                        'taxonomy'   => ['product_cat'],
                        'field_type' => 'select_advanced',
                        'multiple'   => true,
                        'columns'    => 4,
                    ],
                ],
            ],
        ],
    ];

    return $meta_boxes;
}

Im ersten Snippet fehlte die Zeile mit der ID der Settings-Page.

add_filter( 'mb_settings_pages', 'product_cat_contents' );

function product_cat_contents( $settings_pages ) {

    $settings_pages[] = [
        'menu_title'    => __( 'Product Cat Contents', 'my-plugins-textdomain' ),
        'id' => 'product-cat-contents',
        'option_name'   => 'product_cat_contents',
        'position'      => 25,
        'parent'        => 'edit.php?post_type=product',
        'capability'    => 'edit_pages',
        'columns'       => 1,
        'tabs'          => [
            'cat-pdf'          => 'Category based PDFs',
            'cat-content-tabs' => 'Category based content tabs',
        ],
        'icon_url'      => 'dashicons-admin-generic',
    ];

    return $settings_pages;
}  

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable