Setze WordPress Standardvorlage

Ich verwende das Options-Framework-Design , um meine Options-Seite zusammenzustellen, und würde gerne wissen, wie ich die Standard-Vorlage einrichten oder aufrufen würde – je nachdem, welche der Benutzer ausgewählt hat.

Auf meiner Seite mit den Themenoptionen können Sie beispielsweise Folgendes auswählen:

  1. Volle Seite
  2. Seitenleiste links
  3. Seitenleiste rechts

Das sieht ungefähr so ​​aus:

Bildbeschreibung hier eingeben

Sobald der Benutzer eine dieser Optionen ausgewählt hat, sollte er beim Erstellen einer neuen Seite im Dropdown-Menü Seitenattribute> Vorlage die ” Standardvorlage ” auswählen, die er zuvor ausgewählt hat.

Bildbeschreibung hier eingeben

In meiner options.php Datei:

 $options[] = array( 'name' => "Default Template", 'desc' => "The default layout when a new page is created.", 'id' => "layout_options", 'std' => "2c-r-fixed", 'type' => "images", 'options' => array( '1col-fixed' => $imagepath . '1col.png', '2c-l-fixed' => $imagepath . '2cl.png', '2c-r-fixed' => $imagepath . '2cr.png') ); 

Um die Ausgabe aufzurufen:

  

Wo / was müsste ich in meinen Themendateien einfügen, um die Benutzerauswahl zu übernehmen und auf die Standardvorlage zu richten , da sie derzeit nur das ausgewählte Bild speichert?

Solutions Collecting From Web of "Setze WordPress Standardvorlage"

Die bessere, sauberere Lösung wäre es, keine benutzerdefinierten Seitenvorlagen zu verwenden, um Seitenlayouts * zu definieren, sondern benutzerdefinierte Metadaten zu verwenden, um Seitenlayouts zu definieren.

Implementieren:

  1. Erstellen Sie eine Designoption für das standardmäßige statische Seitenlayout , das alle möglichen Optionen für das Seitenlayout enthält
  2. Erstellen Sie ein _page_layout benutzerdefiniertes Post-Meta für das _page_layout , das die Option “Standardlayout” sowie alle möglichen Layoutoptionen enthält, die in der obigen Designoption verwendet werden
  3. Definieren Sie einen body_class Filter, um eine layout-$layout class über das Template-Tag body_class() an das HTML-Tag body_class() , wobei $layout folgendermaßen definiert ist:
    • Wenn 'default' == '_page_layout' , verwende den Wert der 'default' == '_page_layout' Option
    • Wenn '$layout' == '_page_layout' , verwenden Sie $layout

Proof-of-Concept-Code von Oenology folgt (Anmerkung: modifiziert vom Original, da ich benutzerdefiniertes Post-Meta für Layouts für statische Seiten, einzelne Blog-Posts und Archiv-Indexseiten anwende):

Meta-Boxen hinzufügen

 /** * Add Layout Meta Box * * @uses __() * @uses add_meta_box() */ function oenology_add_layout_meta_box( $post ) { global $wp_meta_boxes; $context = 'side'; // 'normal', 'side', 'advanced' $priority = 'default'; // 'high', 'core', 'low', 'default' add_meta_box( 'oenology_layout', __( 'Static Page Layout', 'oenology' ), 'oenology_layout_meta_box', 'page', $context, $priority ); } // Hook meta boxes into 'add_meta_boxes' add_action( 'add_meta_boxes-page', 'oenology_add_layout_meta_box' ); /** * Define Layout Meta Box * * Define the markup for the meta box * for the "layout" post custom meta * data. The metabox will consist of * radio selection options for "default" * and each defined, valid layout * option for single blog posts or * static pages, depending on the * context. * * @uses oenology_get_option_parameters() Defined in \functions\options.php * @uses checked() * @uses get_post_custom() */ function oenology_layout_meta_box() { global $post; $option_parameters = oenology_get_option_parameters(); $custom = ( get_post_custom( $post->ID ) ? get_post_custom( $post->ID ) : false ); $layout = ( isset( $custom['_oenology_layout'][0] ) ? $custom['_oenology_layout'][0] : 'default' ); $valid_layouts = $option_parameters['default_static_page_layout']['valid_options']; ?> 

value="default" />
< ?php foreach ( $valid_layouts as $valid_layout ) { ?> value="< ?php echo $valid_layout['name']; ?>" />
< ?php } ?>

< ?php } /** * Validate, sanitize, and save post metadata. * * Validates the user-submitted post custom * meta data, ensuring that the selected layout * option is in the array of valid layout * options; otherwise, it returns 'default'. * * @uses oenology_get_option_parameters() Defined in \functions\options.php * @uses array_key_exists() * @uses update_post_meta() */ function oenology_save_layout_post_metadata(){ global $post; $option_parameters = oenology_get_option_parameters(); $valid_layouts = array(); if ( 'post' == $post->post_type ) { $valid_layouts = $option_parameters['default_single_post_layout']['valid_options']; } else if ( 'page' == $post->post_type ) { $valid_layouts = $option_parameters['default_static_page_layout']['valid_options']; } $layout = ( isset( $_POST['_oenology_layout'] ) && array_key_exists( $_POST['_oenology_layout'], $valid_layouts ) ? $_POST['_oenology_layout'] : 'default' ); update_post_meta( $post->ID, '_oenology_layout', $layout ); } // Hook the save layout post custom meta data into // publish_{post-type}, draft_{post-type}, and future_{post-type} add_action( 'draft_page', 'oenology_save_layout_post_metadata' ); add_action( 'future_post', 'oenology_save_layout_post_metadata' ); add_action( 'future_page', 'oenology_save_layout_post_metadata' );

Ermitteln des aktuellen Seitenlayouts

 /** * Get Current Page Layout */ function oenology_get_current_page_layout() { // Use default layout for 404 pages if ( is_404() ) { return 'default'; } // Otherwise, determine appropriate layout $layout = ''; global $post; global $oenology_options; $custom = ( get_post_custom( $post->ID ) ? get_post_custom( $post->ID ) : false ); $custom_layout = ( isset( $custom['_oenology_layout'][0] ) ? $custom['_oenology_layout'][0] : 'default' ); if ( ! is_admin() ) { if ( is_attachment() ) { $layout .= 'attachment'; } else if ( is_page() ) { if ( 'default' == $custom_layout ) { $layout .= $oenology_options['default_static_page_layout']; } else { $layout .= $custom_layout; } } } else if ( is_admin() ) { if ( 'attachment' == $post->post_type ) { $layout .= 'attachment'; } else if ( 'page' == $post->post_type ) { if ( 'default' == $custom_layout ) { $layout .= $oenology_options['default_static_page_layout']; } else { $layout .= $custom_layout; } } } return $layout; } 

Filterungsklasse

 /** * Add layout CSS classes to the HTML body tag * * Filter Hook: body_class * * Filter 'body_class' to include * classes for page layout. * * @uses oenology_get_current_page_layout() Defined in \functions\custom.php * * @since Oenology 2.0 */ function oenology_filter_body_class( $classes ) { $layout = 'layout-'; $layout .= oenology_get_current_page_layout(); $classes[] = $layout; return $classes; } // Hook custom classes into 'body_class' add_filter( 'body_class', 'oenology_filter_body_class' ); 

* Benutzerdefinierte Seitenvorlagen waren eigentlich nicht zum Definieren von Layouts gedacht, sondern zum Definieren von benutzerdefiniertem Seiteninhalt.