根据 post 类型加载侧边栏块

Loading sidebar blocks based on post type

我正在为 Magento 使用 Fishpig WordPress 扩展(带有 CPT 扩展),但我似乎无法弄清楚如何根据当前 post 的类型加载边栏块。我只想在以下情况下加载特定块:

对于单个 post 视图,我在我的 local.xml 中添加了块,如下所示:

<wordpress_post_view>
    <reference name="right">
        <remove name="wordpress.widget.categories" />
        <block type="wordpress/sidebar_widget_categories" name="wordpress.widget.recipe_categories" before="-" as="recipe_categories" template="wordpress/sidebar/widget/categories.phtml">
            <action method="setTitle"><title>Recipe Categories</title></action>
            <action method="setTaxonomy"><title>recipe_category</title></action>
        </block>
    </reference>
</wordpress_post_view>

工作正常,我只需要弄清楚如何限制它只显示 recipe post 类型。 recipe 档案和 recipe_category 分类术语档案也是如此。

我通过检查 wordpress/sidebar/widget/categories.phtml 模板文件中的 post 类型设法拼凑出一个解决方案。仍然对更清洁的解决方案感兴趣。

$post_type = 'post';
if( $post = Mage::registry('wordpress_post') ) {
    $post_type = $post->getPostType();
} elseif( $type = Mage::registry('wordpress_post_type') ) {
    $post_type = $type->getPostType();
} elseif( $term = Mage::registry('wordpress_term') ) {
    $post_type = $term->getTaxonomy() == 'recipe_category' ? 'recipe' : 'post';
}

if( $post_type == 'recipe' ) {
    $this->setTaxonomy('recipe_category');
    $this->setTitle('Recipe Categories');
}

$categories = $this->getCategories();

感谢@BenTideswell 提醒我们这个扩展已经提供了可用于此目的的适当布局句柄,因此我们不需要再创建一个。我们只需要做一些针对适当 post 类型的 layout XML updates

<wordpress_post_view>
    <reference name="right">
        <remove name="wordpress.widget.categories"/>
    </reference>
</wordpress_post_view>

<wordpress_post_view_recipe>
    <reference name="right">
        <block type="wordpress/sidebar_widget_categories" name="wordpress.widget.recipe_categories" before="-" as="recipe_categories" template="wordpress/sidebar/widget/categories.phtml">
            <action method="setTitle"><title>Recipe Categories</title></action>
            <action method="setTaxonomy"><title>recipe_category</title></action>
        </block>
    </reference>
</wordpress_post_view_recipe>

以上 poster 是正确的,使用布局句柄是执行此操作的好方法(尽管 wordpress_post_view_POSTTYPE 布局句柄已经存在,因此无需通过观察者创建它)但我认为这种方法对于大部分用户来说可能过于技术化。

为此,我刚刚发布了 Magento WordPress Integration that adds support for the Custom Sidebars 插件的 3.1.1.25 版本。此插件允许您在 WordPress 管理中创建额外的侧边栏,并根据 post 类型、存档类型(类别、日期、主页、搜索等)等内容触发它们显示,并为以下内容指定不同的侧边栏每个具体 post。这一切都可以通过 WordPress 管理 > 小部件页面完成。

要添加此功能,请将扩展程序升级到最新版本,然后在 WordPress 管理员中安装自定义边栏插件。然后,您将能够在不接触任何代码的情况下创建自定义侧边栏。