Seitenvorlagenauswahl nach Seitentitel oder ID beschränken?

Ich entwickle eine Multisite und erstelle eigene Themes dafür. Alle Themen enthalten einige vordefinierte Standardseiten, z. Homepage, über, Blog, kontaktieren Sie uns etc.

Auf jeder Seite stehen auch verschiedene Seitenvorlagen zur Verfügung, zB: Homepage1, Homepage2, Blog 1, Blog 2, Kontakt.

Das Problem besteht darin, dass einige Seitenvorlagen nicht für alle Seiten geeignet sind.

Wenn ich zum Beispiel eine Vorlage als “Blog” -Seite entworfen habe, funktioniert sie nicht gut, wenn sie auf eine “Kontakt” -Seite angewendet wird.

Die Frage (endlich): Wie können Sie die verfügbaren Vorlagen je nach Seitentitel oder ID einschränken oder einschränken?

“Menschlicher” Code erforderlich: Wenn die Seite die About-Seite ist, dann zeigen Sie nur die Seitenvorlagen-Optionen x & y usw.

Vielen Dank!

Solutions Collecting From Web of "Seitenvorlagenauswahl nach Seitentitel oder ID beschränken?"

Die kurze Antwort: Es gibt keine Möglichkeit zu kontrollieren, was in dieser Dropdown-Liste angezeigt wird, es sind keine Filter dafür verfügbar. Hoffentlich wird sich das in einer zukünftigen Version ändern.

Eine mögliche Lösung wäre, eine eigene Metabox zu erstellen, die Vorlagen aus Ihrem eigenen Vorlagen-Array für die aktuelle Seite auflistet und die Auswahl als Post-Meta speichert. page_template dann page_template einen Filter page_template , um nach diesem Metawert zu page_template und diese Vorlage zu laden.

EDIT – hier ist ein voll funktionierendes Beispiel mit Code, der von der add_meta_box Codex Seite angepasst wurde. Das einzige, was Sie ändern müssen, ist das Array $wpa70686_custom_templates . Das Format ist die Seiten-ID, für die Sie die Vorlagen zur Verfügung stellen .php , dann innerhalb dieser Arrays den Dateinamen (minus .php ) und den Namen, der im Dropdown-Menü angezeigt wird.

 // page ID, template filename, template display name $wpa70686_custom_templates = array( 42 => array( 'custom1' => 'Custom Template One', 'custom2' => 'Custom Template Two', ), 96 => array( 'custom3' => 'Custom Template Three', 'custom4' => 'Custom Template Four', ) ); // add the meta box add_action( 'add_meta_boxes', 'wpa70686_add_template_box' ); function wpa70686_add_template_box() { add_meta_box( 'wpa70686_template_box', 'Page Template', 'wpa70686_render_template_box', 'page', 'side' ); } // display the meta box on the apprpriate pages function wpa70686_render_template_box( $post ) { global $wpa70686_custom_templates; wp_nonce_field( 'wpa70686_nonce', 'wpa70686_noncename' ); if( array_key_exists( $post->ID, $wpa70686_custom_templates ) ) : $current_value = get_post_meta( $post->ID, '_wpa70686_template', TRUE ); echo ''; else: echo 'no templates for this page'; endif; } // save the meta box value if it exists add_action( 'save_post', 'wpa70686_save_template_box' ); function wpa70686_save_template_box( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( !wp_verify_nonce( $_POST['wpa70686_noncename'], 'wpa70686_nonce' ) ) return; if ( 'page' == $_POST['post_type'] ){ if ( !current_user_can( 'edit_page', $post_id ) ) return; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return; } if( isset( $_POST['wpa70686_template_box'] ) ): $new_value = $_POST['wpa70686_template_box']; $current_value = get_post_meta( $post_id, '_wpa70686_template', true ); if( $current_value ): if( 'default' == $new_value ): delete_post_meta( $post_id, '_wpa70686_template' ); else: update_post_meta( $post_id, '_wpa70686_template', $new_value ); endif; else: add_post_meta( $post_id, '_wpa70686_template', $new_value, true ); endif; endif; } // load the custom template for pages with the meta value set add_filter( 'page_template', 'wpa70686_custom_template' ); function wpa70686_custom_template(){ global $wp_query; if ( $template = get_post_meta( $wp_query->queried_object_id, '_wpa70686_template', true ) ) return locate_template( $template . '.php' ); }