将子主题的标题添加到边栏区域

时间:2013-04-04 作者:Reece

如何在子主题中为小部件添加一些额外的边栏位置。我遇到的困难是,父主题使用了一些非常粗糙的设置来定义当前的侧栏。

我想在我的站点标题中添加一个侧栏区域,在主模板中添加另一个侧栏区域。

父主题的功能。php文件以以下内容开头:

<?php 

add_action( \'after_setup_theme\', \'et_setup_theme\' );
if ( ! function_exists( \'et_setup_theme\' ) ){
    function et_setup_theme(){
        global $themename, $shortname;
        $themename = "Chameleon";
        $shortname = "chameleon";

        require_once(TEMPLATEPATH . \'/epanel/custom_functions.php\'); 

        require_once(TEMPLATEPATH . \'/includes/functions/comments.php\'); 

        require_once(TEMPLATEPATH . \'/includes/functions/sidebars.php\'); 

        load_theme_textdomain(\'Chameleon\',get_template_directory().\'/lang\');

        require_once(TEMPLATEPATH . \'/epanel/options_chameleon.php\');

        require_once(TEMPLATEPATH . \'/epanel/core_functions.php\'); 

        require_once(TEMPLATEPATH . \'/epanel/post_thumbnails_chameleon.php\');

        include(TEMPLATEPATH . \'/includes/widgets.php\');

        add_action( \'wp_enqueue_scripts\', \'et_add_responsive_shortcodes_css\', 11 );

        add_action( \'pre_get_posts\', \'et_home_posts_query\' );

        add_action( \'et_epanel_changing_options\', \'et_delete_featured_ids_cache\' );
        add_action( \'delete_post\', \'et_delete_featured_ids_cache\' );    
        add_action( \'save_post\', \'et_delete_featured_ids_cache\' );
    }
}
其中“require\\u once(TEMPLATEPATH./includes/functions/sidebars.php”)是此文件中对侧栏的唯一引用。

那么边栏。includes目录中的php文件包含以下内容:

<?php
if ( function_exists(\'register_sidebar\') ) {
    register_sidebar(array(
        \'name\' => \'Sidebar\',
        \'before_widget\' => \'<div id="%1$s" class="widget %2$s">\',
        \'after_widget\' => \'</div> <!-- end .widget -->\',
        \'before_title\' => \'<h3 class="title">\',
        \'after_title\' => \'</h3>\',
    ));

    register_sidebar(array(
        \'name\' => \'Footer\',
        \'before_widget\' => \'<div id="%1$s" class="footer-widget %2$s">\',
        \'after_widget\' => \'</div> <!-- end .footer-widget -->\',
        \'before_title\' => \'<h4 class="widgettitle">\',
        \'after_title\' => \'</h4>\',
    ));

    register_sidebar(array(
        \'name\' => \'Homepage\',
        \'before_widget\' => \'<div id="%1$s" class="main-widget %2$s">\',
        \'after_widget\' => \'</div> <!-- end .main-widget -->\',
        \'before_title\' => \'<h3 class="title">\',
        \'after_title\' => \'</h3>\',
    ));
} 
?>
有一个侧边栏。主题根目录中的php文件,其中包含以下内容:

<div id="sidebar">
    <?php if ( !function_exists(\'dynamic_sidebar\') || !dynamic_sidebar(\'Sidebar\') ) : ?> 
    <?php endif; ?>
</div> <!-- end #sidebar -->
因此,让我们(现在)在主模板中添加一个新的侧栏区域。。。家。php模板(我的子主题文件夹中有一个修改过的副本)包含以下对侧栏的引用:

<?php if ( !function_exists(\'dynamic_sidebar\') || !dynamic_sidebar(\'Homepage\') ) : ?> 
            <?php endif; ?>
在这个模板的代码结束之前。。。

<?php get_sidebar(); ?>
“我的主题”文件夹目录结构如下所示:

mywebsiteroot>wp内容>主题>变色龙>包括|主页。php
mywebsiteroot>wp内容>主题>变色龙>包含|函数。php
mywebsiteroot>wp内容>主题>变色龙>包括|侧边栏。php
mywebsiteroot>wp内容>主题>变色龙>包括|风格。css
mywebsiteroot>wp内容>主题>变色龙>包含>功能>侧栏。php
mywebsiteroot>wp内容>主题>变色龙>包含>css>其他样式表。。。

mywebsiteroot>wp内容>主题>lppscustom |主页。php
mywebsiteroot>wp内容>主题>lppscustom |标题。php
mywebsiteroot>wp内容>主题>lppscustom |页脚。php
mywebsiteroot>wp内容>主题>lppscustom |样式。css

和这就是我被困的地方。我知道你可以有自己的自定义函数。php和侧栏。子主题文件夹中的php文件,但如何构造它们?是否必须包含父主题文件中的所有代码?如果是这样,我如何修改代码,使子目录的任何引用都是相对的?如果没有,我如何让它加载父主题的函数文件和侧边栏文件以及自定义文件?

任何帮助都将不胜感激。

1 个回复
SO网友:Wyck

Functions.php 与将被覆盖的其他文件不同,为父/子主题共享。这意味着WordPress将同时加载父级和子级functions.php.

在你的情况下,听起来你只需要创造一个孩子functions.php 然后创建新的register_sidebar .

然后使用dynamic_sidebar 只要你想在你的主题模板中调用你的新边栏。

在我看来,处理子主题的最佳方法是尽量避免重复文件,保持父主题按原样加载,并创建自己的自定义子文件。当然,您必须覆盖一些文件,但要尽量保持模块化。

如果您的主题使用任何硬编码的路径值和不正确的函数调用来包含文件,那么通过子主题重写它将破坏内容,除非您复制结构(除了functions.php).

供参考:http://codex.wordpress.org/Determining_Plugin_and_Content_Directories

例如:
get_stylesheet_directory_uri 将使用子级
get template directory uri 不会

结束

相关推荐

Persistent sidebar.php

这个侧边栏不允许自己在左侧或右侧对齐,因此下面的内容(帖子)可以放在它旁边。一边是侧栏,另一边是立柱。这是页面:http://www.joaoalexandre.com/wordpressteste/artigos/这是索引。php:http://pastebin.com/F9khFceg