连接到侧栏调用以将其替换为自定义侧栏的方法

时间:2014-04-08 作者:harryg

我想更换sidebar-2 在twentyforteen主题中,有一个基于CPT条件语句的自定义侧栏。因此,如果页面显示某个自定义帖子类型,则显示我的自定义侧栏,否则只显示默认侧栏。

我想在不改变主题或使用子主题的情况下完成这项工作(即纯粹从插件)。

以下是我目前掌握的情况:

register_sidebar( array(
    \'name\'         => __( \'Custom Sidebar\' ),
    \'id\'           => \'custom-sidebar\',
    \'description\'  => __( \'My Custom Sidebar\' ),
    ) );

add_action(\'get_header\',\'change_dd_sidebar\');
function change_dd_sidebar() {
    if ( is_singular(\'my_cpt\')) { // Check if we\'re on a single post for my CPT called "ips_due_diligence". Need another check for index pages too.
       unregister_sidebar( \'sidebar-2\' ); //remove the default right sidebar
       dynamic_sidebar( \'custom-sidebar\' ); //this doesn\'t replace the right sidebar - the content appears at the top of the page - no good...
   }
}
有没有办法加入sidebar-2 用我自己的来代替它?

2 个回复
最合适的回答,由SO网友:harryg 整理而成

我已经弄明白了。诀窍是使用get_sidebar 挂接并运行一些条件,以检查我们是否在CPT页面(归档或单数或CPT分类归档)上,以及我们挂接的侧栏是否是要替换的侧栏($sidebar == \'content\').

如果满足这些条件,我们将取消注册sidebar-2 并添加我们自己的侧栏。如果主题没有sidebar-2 作为content 侧栏。

//Register the alternative sidebar
register_sidebar( array(
    \'name\'         => __( \'Custom Sidebar\' ),
    \'id\'           => \'cpt-sidebar\',
    \'description\'  => __( \'Sidebar for showing cpt-specific content.\' ),
    \'before_title\' => \'<h1 class="widget-title">\',
    \'after_title\'  => \'</h1>\', 
    \'before_widget\' => \'<aside id="%1$s" class="widget %2$s">\',
    \'after_widget\'  => \'</aside>\',
    ) );

add_action(\'get_sidebar\',\'change_cpt_sidebar\');
function change_cpt_sidebar($sidebar) {

    if ( (is_post_type_archive(\'my_cpt\') || is_singular(\'my_cpt\') || is_tax(\'cpt_tax\')) && $sidebar == \'content\') { // Check if we\'re on a CPT page
        unregister_sidebar( \'sidebar-2\' );
        ?>
        <div id="content-sidebar" class="content-sidebar widget-area" role="complementary">
            <?php
        dynamic_sidebar( \'cpt-sidebar\' );
        ?>
    </div>
    <?php
     }
}

SO网友:Brad Dalton

我不会用unregister_sidebar

我会复制侧边栏的内容。将php文件添加到插件,并将条件添加到默认侧栏-2,以及在该文件中添加新的侧栏-4,并为其添加条件。

<?php
if( is_active_sidebar( \'sidebar-4\' ) && is_singular(\'your-cpt\') ) {
}
?>
<div id="content-sidebar" class="content-sidebar widget-area" role="complementary">
<?php dynamic_sidebar( \'sidebar-4\' ); ?>
</div><!-- #content-sidebar -->
您还需要添加一个函数。php或插件。php文件,其中包含注册新边栏-4的代码,非常类似于使用子主题所做的操作。

function cpt_widget() {

    register_sidebar( array(
    \'name\'          => __( \'Custom Post Type Sidebar\', \'twentyfourteen\' ),
    \'id\'            => \'sidebar-4\',
    \'description\'   => __( \'Appears on the right for cpts pnly.\', \'twentyfourteen\' ),
    \'before_widget\' => \'<aside id="%1$s" class="widget %2$s">\',
    \'after_widget\'  => \'</aside>\',
    \'before_title\'  => \'<h1 class="widget-title">\',
    \'after_title\'   => \'</h1>\',
) );
}
add_action( \'widgets_init\', \'cpt_widget\' );
您还可以创建一个cpt。php文件,并在其中添加边栏4。

结束

相关推荐

Custom Post Types in plugins?

我一直在想这个。在我现在看到的大多数插件中,它们看起来像CPT,但没有“已发布”链接。他们也不担任职务。它们只是停留在仪表板中的插件,页面和列列表顶部有“添加新”链接,当您单击“编辑”时,可以像在任何其他CPT中一样编辑项目。所以我想知道他们是否是CPT?如果是的话,有没有关于这方面的教程?我正在考虑为我的网站创建一个插件,我想要的是构建一个插件,我可以“添加新项目”,并保存项目(并且可以编辑)。我可以通过短代码调用项目。我知道如何在函数中创建CPT。php和我一直在阅读关于基本插件创建的内容。我似乎找不