为Genesis添加新布局

时间:2012-03-04 作者:iCeR

我为genesis框架添加了一个名为“modalwindow”的新布局。这个布局应该只显示内容,因为它是一个加载页面内容的模式窗口(我不想显示任何标题、边栏、页脚、菜单或其他任何内容,只想显示该页面的内容)。

我应该为它添加什么来只显示该页面的内容而不显示其他内容?ie:删除页眉、边栏、页脚、菜单等的代码。目前我已经在WP admin中为页面选择了“modalwindow”布局,现在需要从内容中删除所有内容。

代码:

// from "/themes/genesis/lib/structure/layout.php"

<?php
/**
 * Controls layout structure.
 *
 * @package Genesis
 */

add_filter( \'content_width\', \'genesis_content_width\', 10, 3 );
/**
 * This function filters the content width based on the user selected layout.
 *
 * @since 1.6
 */
function genesis_content_width( $default, $small, $large ) {

    switch ( genesis_site_layout() ) {
        case \'full-width-content\':
            $width = $large;
            break;
        case \'content-sidebar-sidebar\':
        case \'sidebar-content-sidebar\':
        case \'sidebar-sidebar-content\':
            $width = $small;
            break;
        default:
            $width = $default;
    }

    return $width;

}

add_filter(\'body_class\', \'genesis_custom_body_class\', 15);
/**
 * This function/filter adds custom body class(es) to the
 * body class array. It accepts values from a per-post/page
 * custom field, and only outputs when viewing singular page.
 *
 * @since 1.4
 */
function genesis_custom_body_class( $classes ) {

    $new_class = is_singular() ? genesis_get_custom_field( \'_genesis_custom_body_class\' ) : null;

    if ( $new_class ) $classes[] = esc_attr( sanitize_html_class( $new_class ) );

    return $classes;

}

add_action(\'genesis_meta\', \'genesis_load_stylesheet\');
/**
 * This function loads the stylesheet.
 * If a child theme is active, it loads the child theme\'s stylesheet,
 * otherwise, it loads the Genesis stylesheet.
 *
 */
function genesis_load_stylesheet() {

    echo \'<link rel="stylesheet" href="\'.get_bloginfo(\'stylesheet_url\').\'" type="text/css" media="screen" />\'."\\n";

}

add_filter(\'body_class\', \'genesis_header_body_classes\');
/**
 * This function/filter adds new classes to the <body>
 * so that we can use psuedo-variables in our CSS file,
 * which helps us achieve multiple header layouts with minimal code
 *
 * @since 0.2.2
 */
function genesis_header_body_classes($classes) {

    // add header classes to $classes array
    if ( ! is_active_sidebar( \'header-right\' ) )
        $classes[] = \'header-full-width\';

    if ( \'image\' == genesis_get_option(\'blog_title\') || \'blank\' == get_header_textcolor() )
        $classes[] = \'header-image\';

    // return filtered $classes
    return $classes;

}

add_filter(\'body_class\', \'genesis_layout_body_classes\');
/**
 * This function/filter adds new classes to the <body>
 * so that we can use psuedo-variables in our CSS file,
 * which helps us achieve multiple site layouts with minimal code
 *
 * @since 0.2.2
 */
function genesis_layout_body_classes($classes) {

    // get the layout
    $site_layout = genesis_site_layout();

    // add new class to $classes array
    if ( $site_layout ) $classes[] = $site_layout;

    // return filtered $classes
    return $classes;
}

add_action(\'genesis_after_content\', \'genesis_get_sidebar\');
/**
 * This function outputs the sidebar.php file
 * if specified in theme options or in-post options
 *
 * @since 0.2
 */
function genesis_get_sidebar() {

    // get the layout
    $site_layout = genesis_site_layout();

    // don\'t load sidebar on pages that don\'t need it
    if ( $site_layout == \'full-width-content\' ||
        $site_layout == \'modalwindow\' ) return;

    // output the primary sidebar
    get_sidebar();
}

add_action(\'genesis_after_content_sidebar_wrap\', \'genesis_get_sidebar_alt\');
/**
 * This function outputs the sidebar_alt.php file
 * if specified in theme options or in-post options
 *
 * @since 0.2
 */
function genesis_get_sidebar_alt() {

    // get the layout
    $site_layout = genesis_site_layout();

    // don\'t load sidebar-alt on pages that don\'t need it
    if ( $site_layout == \'content-sidebar\' ||
        $site_layout == \'sidebar-content\' ||
        $site_layout == \'full-width-content\' ||
        $site_layout == \'modalwindow\' ) return;

    // output the alternate sidebar
    get_sidebar(\'alt\');

}
代码:

// from "/themes/genesis/lib/functions/layout.php"

<?php
/**
 * Register default Genesis layouts.
 *
 * @package Genesis
 */

add_action(\'genesis_init\', \'genesis_create_initial_layouts\', 0);
/**
 * Creates the initial layouts when the \'init\' action is fired
 *
 * @since 1.4
 */
function genesis_create_initial_layouts() {

    genesis_register_layout( \'content-sidebar\', array(
        \'label\' => __(\'Content-Sidebar\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/cs.gif\',
        \'default\' => true
    ) );

    genesis_register_layout( \'sidebar-content\', array(
        \'label\' => __(\'Sidebar-Content\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/sc.gif\'
    ) );

    genesis_register_layout( \'content-sidebar-sidebar\', array(
        \'label\' => __(\'Content-Sidebar-Sidebar\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/css.gif\'
    ) );

    genesis_register_layout( \'sidebar-sidebar-content\', array(
        \'label\' => __(\'Sidebar-Sidebar-Content\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/ssc.gif\'
    ) );

    genesis_register_layout( \'sidebar-content-sidebar\', array(
        \'label\' => __(\'Sidebar-Content-Sidebar\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/scs.gif\'
    ) );

    genesis_register_layout( \'full-width-content\', array(
        \'label\' => __(\'Full Width Content\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/c.gif\',
    ) );

    genesis_register_layout( \'modalwindow\', array(
        \'label\' => __(\'Sizing Guide Layout\', \'genesis\'),
        \'img\' => CHILD_URL . \'/images/stcsb.gif\',
    ) );
}

/**
 * This function registers new layouts by modifying the global
 * $_genesis_layouts variable.
 *
 * @since 1.4
 */
function genesis_register_layout( $id = \'\', $args = array() ) {

    global $_genesis_layouts;

    if ( !is_array( $_genesis_layouts ) )
        $_genesis_layouts = array();

    // Don\'t allow empty $id, or double registrations
    if ( !$id || isset( $_genesis_layouts[$id] ) )
        return false;

    $defaults = array(
        \'label\' => __( \'No Label Selected\', \'genesis\' ),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/none.gif\',
    );

    $args = wp_parse_args( $args, $defaults );

    $_genesis_layouts[$id] = $args;

    return $args;

}

/**
 * This function allows a user to identify a layout as being the default
 * layout on a new install, as well as serve as the fallback layout.
 *
 * @since 1.4
 */
function genesis_set_default_layout( $id = \'\' ) {

    global $_genesis_layouts;

    if ( !is_array( $_genesis_layouts ) )
        $_genesis_layouts = array();

    // Don\'t allow empty $id, or double registrations
    if ( !$id || !isset( $_genesis_layouts[$id] ) )
        return false;

    // remove default flag for all other layouts
    foreach ( (array)$_genesis_layouts as $key => $value ) {
        if ( isset( $_genesis_layouts[$key][\'default\'] ) ) {
            unset( $_genesis_layouts[$key][\'default\'] );
        }
    }

    $_genesis_layouts[$id][\'default\'] = true;

    return $id;

}

/**
 * This function unregisters layouts by modifying the global
 * $_genesis_layouts variable.
 *
 * @since 1.4
 */
function genesis_unregister_layout( $id = \'\' ) {

    global $_genesis_layouts;

    if ( !$id || !isset( $_genesis_layouts[$id] ) )
        return false;

    unset( $_genesis_layouts[$id] );

    return true;

}

/**
 * This function returns all registered Genesis Layouts
 *
 * @since 1.4
 */
function genesis_get_layouts() {

    global $_genesis_layouts;

    if ( !is_array( $_genesis_layouts ) )
        $_genesis_layouts = array();

    return $_genesis_layouts;

}

/**
 * This function returns the data from a single layout,
 * specified by the $id passed to it.
 *
 * @since 1.4
 */
function genesis_get_layout( $id ) {

    $layouts = genesis_get_layouts();

    if ( !$id || !isset( $layouts[$id] ) )
        return;

    return $layouts[$id];

}

/**
 * This function returns the layout that is set to default.
 *
 * @since 1.4
 */
function genesis_get_default_layout() {

    global $_genesis_layouts;

    $default = \'\';

    foreach ( (array)$_genesis_layouts as $key => $value ) {
        if ( isset( $value[\'default\'] ) && $value[\'default\'] ) {
            $default = $key; break;
        }
    }

    // return default layout, if exists
    if ( $default ) {
        return $default;
    }

    return \'nolayout\';

}

/**
 * This function checks both the custom field and
 * the theme option to find the user-selected site
 * layout, and returns it.
 *
 * @since 0.2.2
 */
function genesis_site_layout() {

    // If viewing a singular page/post
    if ( is_singular() ) {

        $custom_field = genesis_get_custom_field( \'_genesis_layout\' );
        $site_layout = $custom_field ? $custom_field : genesis_get_option( \'site_layout\' );

    }

    // If viewing a taxonomy archive
    elseif ( is_category() || is_tag() || is_tax() ) {
        global $wp_query;

        $term = $wp_query->get_queried_object();

        $site_layout = $term && isset( $term->meta[\'layout\'] ) && $term->meta[\'layout\'] ? $term->meta[\'layout\'] : genesis_get_option( \'site_layout\' );

    }

    // If viewing an author archive
    elseif( is_author() ) {

        $site_layout = get_the_author_meta( \'layout\', (int)get_query_var(\'author\') ) ? get_the_author_meta( \'layout\', (int)get_query_var(\'author\') ) : genesis_get_option(\'site_layout\');

    }

    // else pull the theme option
    else {

        $site_layout = genesis_get_option( \'site_layout\' );

    }

    // Use default layout as a fallback, if necessary
    if ( !genesis_get_layout( $site_layout ) ) {
        $site_layout = genesis_get_default_layout();
    }

    return esc_attr( apply_filters( \'genesis_site_layout\', $site_layout ) );

}

/**
 * A helper function that outputs the form elements necessary to select a layout.
 *
 * You must manually wrap this in an HTML element with the class of \'genesis-layout-selector\'
 * in order for the CSS and Javascript to apply properly.
 *
 * @since 1.7
 */
function genesis_layout_selector( $args = array() ) {

    /** Merge defaults with user args */
    $args = wp_parse_args( $args, array(
        \'name\'     => \'\',
        \'selected\' => \'\',
        \'echo\'     => true
    ) );

    $output = \'\';

    foreach ( genesis_get_layouts() as $id => $data ) {

        $class = $id == $args[\'selected\'] ? \'selected\' : \'\';

        $output .= sprintf( \'<label title="%1$s" class="box %2$s"><img src="%3$s" alt="%1$s" /><br /> <input type="radio" name="%4$s" id="%5$s" value="%5$s" %6$s /></label>\',
                esc_attr( $data[\'label\'] ),
                esc_attr( $class ),
                esc_url( $data[\'img\'] ),
                esc_attr( $args[\'name\'] ),
                esc_attr( $id ),
                checked( $id, $args[\'selected\'], false )
        );

    }

    /** Echo or Return output */
    if ( $args[\'echo\'] )
        echo $output;
    else
        return $output;

}

/**
* A helper function to do the logic, and potentially echo/return a structural wrap div.
*
* @since 1.6
*/
function genesis_structural_wrap( $context = \'\', $output = \'<div class="wrap">\', $echo = true ) {

    $genesis_structural_wraps = get_theme_support( \'genesis-structural-wraps\' );

    if ( ! in_array( $context, (array) $genesis_structural_wraps[0] ) )
        return \'\';

    switch( $output ) {
        case \'open\':
            $output = \'<div class="wrap">\';
            break;
        case \'close\':
            $output = \'</div><!-- end .wrap -->\';
            break;
    }

    if ( $echo )
        echo $output;
    else
        return $output;

}

/**
 * Helper function for returning layout key \'content-sidebar\'.
 *
 * @since 1.7
 */
function __genesis_return_content_sidebar() {
    return \'content-sidebar\';
}

/**
 * Helper function for returning layout key \'sidebar-content\'.
 *
 * @since 1.7
 */
function __genesis_return_sidebar_content() {
    return \'sidebar-content\';
}

/**
 * Helper function for returning layout key \'content-sidebar-sidebar\'.
 *
 * @since 1.7
 */
function __genesis_return_content_sidebar_sidebar() {
    return \'content-sidebar-sidebar\';
}

/**
 * Helper function for returning layout key \'sidebar-sidebar-content\'.
 *
 * @since 1.7
 */
function __genesis_return_sidebar_sidebar_content() {
    return \'sidebar-sidebar-content\';
}

/**
 * Helper function for returning layout key \'sidebar-content-sidebar\'.
 *
 * @since 1.7
 */
function __genesis_return_sidebar_content_sidebar() {
    return \'sidebar-content-sidebar\';
}

/**
 * Helper function for returning layout key \'full-width-content\'.
 *
 * @since 1.7
 */
function __genesis_return_full_width_content() {
    return \'full-width-content\';
}

/**
 * Helper function for returning layout key \'modalwindow\'.
 *
 * @since 1.7
 */
function __genesis_return_modalwindow_content() {
    return \'modalwindow\';
}

1 个回复
SO网友:iCeR

我尝试用以下代码回答我自己的问题:

// Added to layout.php in /genesis/lib/structure.php

add_action(\'genesis_before\', \'modalwindow_layout_logic\');

    function modalwindow_layout_logic() {

        $site_layout = genesis_site_layout();

        if ( $site_layout == \'modalwindow\' ) {
            // Remove default genesis sidebars
            remove_action( \'genesis_after_content\', \'genesis_get_sidebar\' );
            remove_action( \'genesis_after_content_sidebar_wrap\', \'genesis_get_sidebar_alt\');
            remove_action( \'genesis_footer\', \'genesis_do_footer\' );  
            remove_action( \'genesis_header\', \'genesis_do_header\' );  
            // Remove layout specific sidebars
            remove_action(\'genesis_before_header\', \'genesis_do_nav\');
            remove_action(\'genesis_after_header\', \'genesis_do_subnav\');
            remove_action(\'genesis_header\', \'genesis_do_nav\');
            remove_action(\'genesis_footer\',\'themedy_footer_menu\');
            remove_action(\'genesis_before_loop\', \'genesis_do_breadcrumbs\'); // Remove Breadcrumbs by default
            remove_action(\'genesis_after_header\',\'themedy_secondary_area\');
        }
    }
似乎还有更多需要删除的内容-有什么想法吗?谢谢

结束

相关推荐

使用functions.php使子菜单项成为管理菜单中的主链接

我正在尝试使用这些函数自定义管理区域。php文件,使我的客户更容易处理。我之前收到的一个请求是将一些子菜单移到主导航中,希望能够完成。例如,我想让小部件和菜单出现在主导航中,而不是作为外观的子菜单。然后,我将一起删除“外观”选项卡。我已经能够删除选项卡,但无法为小部件和菜单创建新按钮。即使我可以得到帮助,而不是从技术上移动它们,而是创建一个新按钮并自己设置链接(例如,对于菜单->/nav Menus.php)。这有可能吗?谢谢

为Genesis添加新布局 - 小码农CODE - 行之有效找到问题解决它

为Genesis添加新布局

时间:2012-03-04 作者:iCeR

我为genesis框架添加了一个名为“modalwindow”的新布局。这个布局应该只显示内容,因为它是一个加载页面内容的模式窗口(我不想显示任何标题、边栏、页脚、菜单或其他任何内容,只想显示该页面的内容)。

我应该为它添加什么来只显示该页面的内容而不显示其他内容?ie:删除页眉、边栏、页脚、菜单等的代码。目前我已经在WP admin中为页面选择了“modalwindow”布局,现在需要从内容中删除所有内容。

代码:

// from "/themes/genesis/lib/structure/layout.php"

<?php
/**
 * Controls layout structure.
 *
 * @package Genesis
 */

add_filter( \'content_width\', \'genesis_content_width\', 10, 3 );
/**
 * This function filters the content width based on the user selected layout.
 *
 * @since 1.6
 */
function genesis_content_width( $default, $small, $large ) {

    switch ( genesis_site_layout() ) {
        case \'full-width-content\':
            $width = $large;
            break;
        case \'content-sidebar-sidebar\':
        case \'sidebar-content-sidebar\':
        case \'sidebar-sidebar-content\':
            $width = $small;
            break;
        default:
            $width = $default;
    }

    return $width;

}

add_filter(\'body_class\', \'genesis_custom_body_class\', 15);
/**
 * This function/filter adds custom body class(es) to the
 * body class array. It accepts values from a per-post/page
 * custom field, and only outputs when viewing singular page.
 *
 * @since 1.4
 */
function genesis_custom_body_class( $classes ) {

    $new_class = is_singular() ? genesis_get_custom_field( \'_genesis_custom_body_class\' ) : null;

    if ( $new_class ) $classes[] = esc_attr( sanitize_html_class( $new_class ) );

    return $classes;

}

add_action(\'genesis_meta\', \'genesis_load_stylesheet\');
/**
 * This function loads the stylesheet.
 * If a child theme is active, it loads the child theme\'s stylesheet,
 * otherwise, it loads the Genesis stylesheet.
 *
 */
function genesis_load_stylesheet() {

    echo \'<link rel="stylesheet" href="\'.get_bloginfo(\'stylesheet_url\').\'" type="text/css" media="screen" />\'."\\n";

}

add_filter(\'body_class\', \'genesis_header_body_classes\');
/**
 * This function/filter adds new classes to the <body>
 * so that we can use psuedo-variables in our CSS file,
 * which helps us achieve multiple header layouts with minimal code
 *
 * @since 0.2.2
 */
function genesis_header_body_classes($classes) {

    // add header classes to $classes array
    if ( ! is_active_sidebar( \'header-right\' ) )
        $classes[] = \'header-full-width\';

    if ( \'image\' == genesis_get_option(\'blog_title\') || \'blank\' == get_header_textcolor() )
        $classes[] = \'header-image\';

    // return filtered $classes
    return $classes;

}

add_filter(\'body_class\', \'genesis_layout_body_classes\');
/**
 * This function/filter adds new classes to the <body>
 * so that we can use psuedo-variables in our CSS file,
 * which helps us achieve multiple site layouts with minimal code
 *
 * @since 0.2.2
 */
function genesis_layout_body_classes($classes) {

    // get the layout
    $site_layout = genesis_site_layout();

    // add new class to $classes array
    if ( $site_layout ) $classes[] = $site_layout;

    // return filtered $classes
    return $classes;
}

add_action(\'genesis_after_content\', \'genesis_get_sidebar\');
/**
 * This function outputs the sidebar.php file
 * if specified in theme options or in-post options
 *
 * @since 0.2
 */
function genesis_get_sidebar() {

    // get the layout
    $site_layout = genesis_site_layout();

    // don\'t load sidebar on pages that don\'t need it
    if ( $site_layout == \'full-width-content\' ||
        $site_layout == \'modalwindow\' ) return;

    // output the primary sidebar
    get_sidebar();
}

add_action(\'genesis_after_content_sidebar_wrap\', \'genesis_get_sidebar_alt\');
/**
 * This function outputs the sidebar_alt.php file
 * if specified in theme options or in-post options
 *
 * @since 0.2
 */
function genesis_get_sidebar_alt() {

    // get the layout
    $site_layout = genesis_site_layout();

    // don\'t load sidebar-alt on pages that don\'t need it
    if ( $site_layout == \'content-sidebar\' ||
        $site_layout == \'sidebar-content\' ||
        $site_layout == \'full-width-content\' ||
        $site_layout == \'modalwindow\' ) return;

    // output the alternate sidebar
    get_sidebar(\'alt\');

}
代码:

// from "/themes/genesis/lib/functions/layout.php"

<?php
/**
 * Register default Genesis layouts.
 *
 * @package Genesis
 */

add_action(\'genesis_init\', \'genesis_create_initial_layouts\', 0);
/**
 * Creates the initial layouts when the \'init\' action is fired
 *
 * @since 1.4
 */
function genesis_create_initial_layouts() {

    genesis_register_layout( \'content-sidebar\', array(
        \'label\' => __(\'Content-Sidebar\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/cs.gif\',
        \'default\' => true
    ) );

    genesis_register_layout( \'sidebar-content\', array(
        \'label\' => __(\'Sidebar-Content\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/sc.gif\'
    ) );

    genesis_register_layout( \'content-sidebar-sidebar\', array(
        \'label\' => __(\'Content-Sidebar-Sidebar\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/css.gif\'
    ) );

    genesis_register_layout( \'sidebar-sidebar-content\', array(
        \'label\' => __(\'Sidebar-Sidebar-Content\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/ssc.gif\'
    ) );

    genesis_register_layout( \'sidebar-content-sidebar\', array(
        \'label\' => __(\'Sidebar-Content-Sidebar\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/scs.gif\'
    ) );

    genesis_register_layout( \'full-width-content\', array(
        \'label\' => __(\'Full Width Content\', \'genesis\'),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/c.gif\',
    ) );

    genesis_register_layout( \'modalwindow\', array(
        \'label\' => __(\'Sizing Guide Layout\', \'genesis\'),
        \'img\' => CHILD_URL . \'/images/stcsb.gif\',
    ) );
}

/**
 * This function registers new layouts by modifying the global
 * $_genesis_layouts variable.
 *
 * @since 1.4
 */
function genesis_register_layout( $id = \'\', $args = array() ) {

    global $_genesis_layouts;

    if ( !is_array( $_genesis_layouts ) )
        $_genesis_layouts = array();

    // Don\'t allow empty $id, or double registrations
    if ( !$id || isset( $_genesis_layouts[$id] ) )
        return false;

    $defaults = array(
        \'label\' => __( \'No Label Selected\', \'genesis\' ),
        \'img\' => GENESIS_ADMIN_IMAGES_URL . \'/layouts/none.gif\',
    );

    $args = wp_parse_args( $args, $defaults );

    $_genesis_layouts[$id] = $args;

    return $args;

}

/**
 * This function allows a user to identify a layout as being the default
 * layout on a new install, as well as serve as the fallback layout.
 *
 * @since 1.4
 */
function genesis_set_default_layout( $id = \'\' ) {

    global $_genesis_layouts;

    if ( !is_array( $_genesis_layouts ) )
        $_genesis_layouts = array();

    // Don\'t allow empty $id, or double registrations
    if ( !$id || !isset( $_genesis_layouts[$id] ) )
        return false;

    // remove default flag for all other layouts
    foreach ( (array)$_genesis_layouts as $key => $value ) {
        if ( isset( $_genesis_layouts[$key][\'default\'] ) ) {
            unset( $_genesis_layouts[$key][\'default\'] );
        }
    }

    $_genesis_layouts[$id][\'default\'] = true;

    return $id;

}

/**
 * This function unregisters layouts by modifying the global
 * $_genesis_layouts variable.
 *
 * @since 1.4
 */
function genesis_unregister_layout( $id = \'\' ) {

    global $_genesis_layouts;

    if ( !$id || !isset( $_genesis_layouts[$id] ) )
        return false;

    unset( $_genesis_layouts[$id] );

    return true;

}

/**
 * This function returns all registered Genesis Layouts
 *
 * @since 1.4
 */
function genesis_get_layouts() {

    global $_genesis_layouts;

    if ( !is_array( $_genesis_layouts ) )
        $_genesis_layouts = array();

    return $_genesis_layouts;

}

/**
 * This function returns the data from a single layout,
 * specified by the $id passed to it.
 *
 * @since 1.4
 */
function genesis_get_layout( $id ) {

    $layouts = genesis_get_layouts();

    if ( !$id || !isset( $layouts[$id] ) )
        return;

    return $layouts[$id];

}

/**
 * This function returns the layout that is set to default.
 *
 * @since 1.4
 */
function genesis_get_default_layout() {

    global $_genesis_layouts;

    $default = \'\';

    foreach ( (array)$_genesis_layouts as $key => $value ) {
        if ( isset( $value[\'default\'] ) && $value[\'default\'] ) {
            $default = $key; break;
        }
    }

    // return default layout, if exists
    if ( $default ) {
        return $default;
    }

    return \'nolayout\';

}

/**
 * This function checks both the custom field and
 * the theme option to find the user-selected site
 * layout, and returns it.
 *
 * @since 0.2.2
 */
function genesis_site_layout() {

    // If viewing a singular page/post
    if ( is_singular() ) {

        $custom_field = genesis_get_custom_field( \'_genesis_layout\' );
        $site_layout = $custom_field ? $custom_field : genesis_get_option( \'site_layout\' );

    }

    // If viewing a taxonomy archive
    elseif ( is_category() || is_tag() || is_tax() ) {
        global $wp_query;

        $term = $wp_query->get_queried_object();

        $site_layout = $term && isset( $term->meta[\'layout\'] ) && $term->meta[\'layout\'] ? $term->meta[\'layout\'] : genesis_get_option( \'site_layout\' );

    }

    // If viewing an author archive
    elseif( is_author() ) {

        $site_layout = get_the_author_meta( \'layout\', (int)get_query_var(\'author\') ) ? get_the_author_meta( \'layout\', (int)get_query_var(\'author\') ) : genesis_get_option(\'site_layout\');

    }

    // else pull the theme option
    else {

        $site_layout = genesis_get_option( \'site_layout\' );

    }

    // Use default layout as a fallback, if necessary
    if ( !genesis_get_layout( $site_layout ) ) {
        $site_layout = genesis_get_default_layout();
    }

    return esc_attr( apply_filters( \'genesis_site_layout\', $site_layout ) );

}

/**
 * A helper function that outputs the form elements necessary to select a layout.
 *
 * You must manually wrap this in an HTML element with the class of \'genesis-layout-selector\'
 * in order for the CSS and Javascript to apply properly.
 *
 * @since 1.7
 */
function genesis_layout_selector( $args = array() ) {

    /** Merge defaults with user args */
    $args = wp_parse_args( $args, array(
        \'name\'     => \'\',
        \'selected\' => \'\',
        \'echo\'     => true
    ) );

    $output = \'\';

    foreach ( genesis_get_layouts() as $id => $data ) {

        $class = $id == $args[\'selected\'] ? \'selected\' : \'\';

        $output .= sprintf( \'<label title="%1$s" class="box %2$s"><img src="%3$s" alt="%1$s" /><br /> <input type="radio" name="%4$s" id="%5$s" value="%5$s" %6$s /></label>\',
                esc_attr( $data[\'label\'] ),
                esc_attr( $class ),
                esc_url( $data[\'img\'] ),
                esc_attr( $args[\'name\'] ),
                esc_attr( $id ),
                checked( $id, $args[\'selected\'], false )
        );

    }

    /** Echo or Return output */
    if ( $args[\'echo\'] )
        echo $output;
    else
        return $output;

}

/**
* A helper function to do the logic, and potentially echo/return a structural wrap div.
*
* @since 1.6
*/
function genesis_structural_wrap( $context = \'\', $output = \'<div class="wrap">\', $echo = true ) {

    $genesis_structural_wraps = get_theme_support( \'genesis-structural-wraps\' );

    if ( ! in_array( $context, (array) $genesis_structural_wraps[0] ) )
        return \'\';

    switch( $output ) {
        case \'open\':
            $output = \'<div class="wrap">\';
            break;
        case \'close\':
            $output = \'</div><!-- end .wrap -->\';
            break;
    }

    if ( $echo )
        echo $output;
    else
        return $output;

}

/**
 * Helper function for returning layout key \'content-sidebar\'.
 *
 * @since 1.7
 */
function __genesis_return_content_sidebar() {
    return \'content-sidebar\';
}

/**
 * Helper function for returning layout key \'sidebar-content\'.
 *
 * @since 1.7
 */
function __genesis_return_sidebar_content() {
    return \'sidebar-content\';
}

/**
 * Helper function for returning layout key \'content-sidebar-sidebar\'.
 *
 * @since 1.7
 */
function __genesis_return_content_sidebar_sidebar() {
    return \'content-sidebar-sidebar\';
}

/**
 * Helper function for returning layout key \'sidebar-sidebar-content\'.
 *
 * @since 1.7
 */
function __genesis_return_sidebar_sidebar_content() {
    return \'sidebar-sidebar-content\';
}

/**
 * Helper function for returning layout key \'sidebar-content-sidebar\'.
 *
 * @since 1.7
 */
function __genesis_return_sidebar_content_sidebar() {
    return \'sidebar-content-sidebar\';
}

/**
 * Helper function for returning layout key \'full-width-content\'.
 *
 * @since 1.7
 */
function __genesis_return_full_width_content() {
    return \'full-width-content\';
}

/**
 * Helper function for returning layout key \'modalwindow\'.
 *
 * @since 1.7
 */
function __genesis_return_modalwindow_content() {
    return \'modalwindow\';
}

1 个回复
SO网友:iCeR

我尝试用以下代码回答我自己的问题:

// Added to layout.php in /genesis/lib/structure.php

add_action(\'genesis_before\', \'modalwindow_layout_logic\');

    function modalwindow_layout_logic() {

        $site_layout = genesis_site_layout();

        if ( $site_layout == \'modalwindow\' ) {
            // Remove default genesis sidebars
            remove_action( \'genesis_after_content\', \'genesis_get_sidebar\' );
            remove_action( \'genesis_after_content_sidebar_wrap\', \'genesis_get_sidebar_alt\');
            remove_action( \'genesis_footer\', \'genesis_do_footer\' );  
            remove_action( \'genesis_header\', \'genesis_do_header\' );  
            // Remove layout specific sidebars
            remove_action(\'genesis_before_header\', \'genesis_do_nav\');
            remove_action(\'genesis_after_header\', \'genesis_do_subnav\');
            remove_action(\'genesis_header\', \'genesis_do_nav\');
            remove_action(\'genesis_footer\',\'themedy_footer_menu\');
            remove_action(\'genesis_before_loop\', \'genesis_do_breadcrumbs\'); // Remove Breadcrumbs by default
            remove_action(\'genesis_after_header\',\'themedy_secondary_area\');
        }
    }
似乎还有更多需要删除的内容-有什么想法吗?谢谢