根据帖子类型加载侧栏块

时间:2015-03-02 22:40:21

标签: php wordpress magento custom-post-type fishpig

我使用Fishpig WordPress扩展程序用于Magento(使用CPT扩展程序),我似乎无法弄清楚如何根据当前帖子的类型加载侧边栏块。我只想在以下情况下加载特定的块:

  • 我正在查看类型为recipe
  • 的单个帖子
  • 我正在查看recipe
  • 类型的存档
  • 我正在查看自定义分类recipe_category
  • 的术语页面

对于单个帖子视图,我在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帖子类型。 recipe存档和recipe_category分类术语存档也是如此。

3 个答案:

答案 0 :(得分:2)

上面的海报是正确的,使用布局句柄是一个很好的方法(尽管wordpress_post_view_POSTTYPE布局句柄已经存在,所以不需要通过观察者创建它)但我认为这种方法可能太技术了对于很大一部分用户。

作为对此的回应,我刚刚发布了Magento WordPress Integration的3.1.1.25版,增加了对Custom Sidebars插件的支持。此插件允许您在WordPress管理中创建额外的侧边栏,并根据帖子类型,存档类型(类别,日期,主页,搜索等)触发它们以及为每个特定帖子指定不同的侧边栏。这一切都可以通过WordPress管理员&gt;完成。小部件页面。

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

答案 1 :(得分:0)

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

$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();

答案 2 :(得分:0)

感谢@BenTideswell提醒我们这个扩展已经提供了一个可以用于此目的的适当布局句柄,因此我们不需要创建另一个。我们只需要针对相应的帖子类型执行几个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>