get_queried_object_id(); /* Get the post layout. */ $layout = get_post_layout( $post_id ); } /* Make sure the given layout is in the array of available post layouts for the theme. */ if ( empty( $layout ) || !in_array( $layout, $post_layouts[0] ) ) $layout = 'default'; /* @deprecated 0.2.0. Use the 'get_theme_layout' hook. */ $layout = apply_filters( 'get_post_layout', "layout-{$layout}" ); /* Return the layout and allow plugin/theme developers to override it. */ return esc_attr( apply_filters( 'get_theme_layout', $layout ) ); } /** * Get the post layout based on the given post ID. * * @since 0.2.0 */ function get_post_layout( $post_id ) { $post_layout = get_post_meta( $post_id, apply_filters( 'theme_layouts_meta_key', 'Layout' ), true ); return ( !empty( $post_layout ) ? $post_layout : 'default' ); } /** * Update/set the post layout based on the given post ID and layout. * * @since 0.2.0 */ function set_post_layout( $post_id, $layout ) { update_post_meta( $post_id, apply_filters( 'theme_layouts_meta_key', 'Layout' ), $layout ); } /** * Adds the post layout class to the WordPress body class in the form of "layout-$layout". This allows * theme developers to design their theme layouts based on the layout class. If designing a theme with * this extension, the theme should make sure to handle all possible layout classes. * * @since 0.2.0 * @param array $classes * @param array $classes */ function theme_layouts_body_class( $classes ) { /* Adds the layout to array of body classes. */ $classes[] = sanitize_html_class( theme_layouts_get_layout() ); /* Return the $classes array. */ return $classes; } /** * Creates default text strings based on the default post layouts. Theme developers that add custom * layouts should filter 'post_layouts_strings' to add strings to match the custom layouts, but it's not * required. The layout name will be used if no text string is found. * * @since 0.2.0 */ function theme_layouts_strings() { /* Set up the default layout strings. */ $strings = array( 'default' => __( 'Default', theme_layouts_textdomain() ), '1c' => __( 'One Column', theme_layouts_textdomain() ), '2c-l' => __( 'Two Columns, Left', theme_layouts_textdomain() ), '2c-r' => __( 'Two Columns, Right', theme_layouts_textdomain() ), '3c-l' => __( 'Three Columns, Left', theme_layouts_textdomain() ), '3c-r' => __( 'Three Columns, Right', theme_layouts_textdomain() ), '3c-c' => __( 'Three Columns, Center', theme_layouts_textdomain() ) ); /* Allow devs to filter the strings for custom layouts. */ return apply_filters( 'theme_layouts_strings', $strings ); } /** * Get a specific layout's text string. * * @since 0.2.0 */ function theme_layouts_get_string( $layout ) { /* Get an array of post layout strings. */ $strings = theme_layouts_strings(); /* Return the layout's string if it exists. Else, return the layout slug. */ return ( ( isset( $strings[$layout] ) ) ? $strings[$layout] : $layout ); } /** * Post layouts admin setup. Registers the post layouts meta box for the post editing screen. Adds the * metadata save function to the 'save_post' hook. * * @since 0.2.0 */ function theme_layouts_admin_setup() { /* Gets available public post types. */ $post_types = get_post_types( array( 'public' => true ), 'objects' ); /* For each available post type, create a meta box on its edit page if it supports '$prefix-post-settings'. */ foreach ( $post_types as $type ) add_meta_box( 'theme-layouts-post-meta-box', __( 'Layout', theme_layouts_textdomain() ), 'theme_layouts_post_meta_box', $type->name, 'side', 'default' ); /* Saves the post format on the post editing page. */ add_action( 'save_post', 'theme_layouts_save_post', 10, 2 ); } /** * Displays a meta box of radio selectors on the post editing screen, which allows theme users to select * the layout they wish to use for the specific post. * * @since 0.2.0 */ function theme_layouts_post_meta_box( $post, $box ) { /* Get theme-supported theme layouts. */ $layouts = get_theme_support( 'theme-layouts' ); $post_layouts = $layouts[0]; /* Get the current post's layout. */ $post_layout = get_post_layout( $post->ID ); ?>