根据 post 类型加载侧边栏块
Loading sidebar blocks based on post type
我正在为 Magento 使用 Fishpig WordPress 扩展(带有 CPT 扩展),但我似乎无法弄清楚如何根据当前 post 的类型加载边栏块。我只想在以下情况下加载特定块:
- 我正在查看类型为
recipe
的单个 post
- 我正在查看
recipe
类型的存档
- 我正在查看自定义分类的术语页
recipe_category
对于单个 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 管理员中安装自定义边栏插件。然后,您将能够在不接触任何代码的情况下创建自定义侧边栏。
我正在为 Magento 使用 Fishpig WordPress 扩展(带有 CPT 扩展),但我似乎无法弄清楚如何根据当前 post 的类型加载边栏块。我只想在以下情况下加载特定块:
- 我正在查看类型为
recipe
的单个 post
- 我正在查看
recipe
类型的存档
- 我正在查看自定义分类的术语页
recipe_category
对于单个 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 管理员中安装自定义边栏插件。然后,您将能够在不接触任何代码的情况下创建自定义侧边栏。