![最终产品图片](https://i-blog.csdnimg.cn/blog_migrate/9c158ee15775f8bc9cd1e742eae5c6ea.png)
如果您经营的WooCommerce商店也有博客,那么您可以决定将博客与商店完全分开,并保留其类别和内容。 但是,为了与商店进行更好的集成,最好创建与您的产品类别相关的博客文章。
为此,您需要将产品类别分类法添加到常规帖子中,使用这些产品类别创建一些帖子,然后在商店中的产品类别存档页面上显示博客帖子。
因此,让我们开始吧!
您需要什么
要继续进行,您需要:
- WordPress的开发安装
- 代码编辑器
- WooCommerce已安装并激活
- 添加到商店的产品(我已经导入了WooCommerce随附的虚拟产品数据-有关如何执行此操作的详细信息,请参阅本指南 )
- 激活了与WooCommerce兼容的主题(我正在使用Storefront )
这是我的起始商店:
![WooCommerce商店-主页](https://i-blog.csdnimg.cn/blog_migrate/988d4fb2cb008ce06ee79ad7efbead12.png)
创建我们的插件
我将创建一个插件来执行此操作,这是比将其添加到主题中更好的做法。 因此,首先在wp-content / plugins目录中创建一个文件。 我将其称为mine tutsplus-woocommerce-category-blog.php 。
打开新文件并添加以下几行:
<?php
/**
* Plugin Name: Tuts+ Add blog posts to WooCommerce product categories
* Plugin URI: https://tutsplus.com
* Description: Add a list of relevant blog posts to product category archives in WooCommerce
* Version: 1.0
* Author: Rachel McCollin
* Author URI: http://rachelmccollin.co.uk
* Textdomain: tutsplus
*
/
编辑上面的代码以反映这是您的插件,然后保存您的插件文件。 现在激活您网站上的插件。
检查WooCommerce是否已激活
如果WooCommerce未在此站点上激活,我不希望该插件中的任何代码运行。 检查WooCommerce是否已激活的最佳方法是检查woocommerce
过滤器是否存在。 如果是这样,我将在此处添加所有的add_action()
调用,这将触发插件中的所有功能。
将此添加到您的插件:
function tutsplus_check_woocommerce_active() {
// check if woocommerce is activated
if ( class_exists( 'woocommerce' ) ) {
add_action( 'init', 'tutsplus_register_productcats_posts' );
add_filter( 'woocommerce_taxonomy_args_product_cat', 'tutsplus_change_productcat_label' );
add_action( 'woocommerce_after_main_content', 'tutsplus_display_productcats_posts' );
}
else {
return;
}
}
add_action( 'plugins_loaded', 'tutsplus_check_woocommerce_active' );
在帖子中添加产品类别
下一步是注册product_cat
对于分类post
职位类型。 使用register taxonomy for object type()
函数的register taxonomy for object type()
执行此操作。
将此添加到您的插件:
function tutsplus_register_productcats_posts() {
register_taxonomy_for_object_type( 'product_cat', 'post' );
}
这会将WooCommerce用于产品类别的product_cat
分类法添加到博客帖子中。 请注意,我还没有将其挂接到动作上,因为在检查WooCommerce时已经完成了。
现在,如果您查看管理屏幕,您将看到针对类别的帖子有两个分类法:
![职位的两类分类法](https://i-blog.csdnimg.cn/blog_migrate/fb702d83f80feec4f7bb1ab148e0bfa3.png)
这有点令人困惑,所以让我们更改管理菜单中用于产品类别的标签。 WooCommerce给我们提供了一个过滤器,称为woocommerce_taxonomy_args_product_cat
。
因此,将以下功能添加到您的插件中:
function tutsplus_change_productcat_label( $args ) {
$args['labels'] = array(
'label' => _x( 'Product Categories', 'tutsplus' ),
'menu_name' => _x( 'Product Categories', 'Admin menu name', 'tutsplus' ),
'add_new_item' => _x( 'Add new product category', 'tutsplus' ),
);
return $args;
}
这会将菜单中的product_cat
分类法名称更改为Product Categories 。
刷新您的管理屏幕并进行检查:
![在管理菜单中正确标记的产品类别](https://i-blog.csdnimg.cn/blog_migrate/6ba5e8c0f5b7e184fe4d23ca8a0c78c5.png)
这应该减少一些混乱(尽管您会发现它不能完全删除它,因为不可能在Quick Edit中更改标签,我们将在不久后使用它)。
注意:您可能决定改为删除标准类别分类法。 在这种情况下,请使用 register_taxonomy()
函数将其注册为空的帖子类型数组,从而有效地将其删除。
现在,添加帖子时,可以为其分配产品类别。 执行此操作的方式取决于您的站点是否使用Gutenberg编辑器,因为WooCommerce产品类别尚不适用于Gutenberg。
如果启用了Gutenberg,则必须使用“主帖子”屏幕上帖子名称下方的“ 快速编辑”链接添加产品类别:
![在快速编辑中添加产品类别](https://i-blog.csdnimg.cn/blog_migrate/80b9891d20377f67b718e619b808c3f2.png)
确保您不要混淆这里称为“ 类别”的两个分类法-在“快速编辑”中无法重命名产品类别。
如果您使用的是经典编辑器,则可以使用帖子编辑屏幕将产品类别添加到帖子中:
![将产品类别添加到后经典编辑器](https://i-blog.csdnimg.cn/blog_migrate/a10ba8942da2698012728da5e327c1f1.png)
随着时间的流逝,WooCommerce可能会与Gutenberg兼容,并且这种情况将会改变。
现在创建一些帖子,并为他们提供不同的产品类别。
在产品类别归档中输出帖子
第二步是在产品类别档案中输出这些帖子。 为此,您可以使用WP_Query
创建一个循环,然后使用woocommerce_after_shop_loop
操作挂钩,WooCommerce在存档页面上输出产品后将运行该挂钩。
如果您想查看该钩子,请查看WooCommerce中的templates/archive-product.php
文件。 如果愿意,您可能希望使用其他钩子将博客文章输出到其他位置。
设置功能
在插件文件中创建一个新函数,并确保它具有您在之前将其挂钩到woocommerce_after_shop_loop
挂钩时使用的名称:
function tutsplus_display_productcats_posts() {
}
现在,让我们填充该函数。
检查我们是否在产品类别存档中
首先,添加条件标签以检查我们是否在产品类别归档中,因为您不希望博客文章显示在主商店页面或搜索页面上。 在函数内部,添加以下内容:
if ( is_product_category() ) {
}
现在,您的代码将仅在产品类别存档页面上运行。
识别当前产品类别
接下来,在条件检查的括号内,添加一行以获取当前查询的对象,即当前产品类别:
$productcat = get_queried_object();
现在,我们可以在设置查询参数时使用该变量。 接下来,添加以下内容:
$args = array(
'post_type' => 'post',
'product_cat' => $productcat->slug,
'posts_per_page' => 5
);
$query = new WP_query ( $args );
if ( $query->have_posts() ) { ?>
<?php }
这定义了我们的查询参数,运行查询,并检查它是否有任何帖子。 接下来,我们需要在该if
语句内添加一个循环:
<section class="productcat-posts">
<?php echo '<h2>' . esc_html__( 'Blog Posts', 'tutsplus' ) . '</h2>'; ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<?php //contents of loop ?>
<article id="post-<?php the_ID(); ?>"<?php post_class(); ?>>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
<a href="<?php the_permalink(); ?>"> Read More...</a>
</article>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
</section>
这将打开一个新的section标签,并在article标签内输出博客文章。 确保最后使用wp_reset_postdata()
重置查询。
这是您的全部功能,如下所示:
function tutsplus_display_posts_in_category_archives() {
if ( is_product_category() ) {
$productcat = get_queried_object();
$args = array(
'post_type' => 'post',
'product_cat' => $productcat->slug,
'posts_per_page' => 5
);
$query = new WP_query ( $args );
if ( $query->have_posts() ) { ?>
<section class="productcat-posts">
<h2>Blog Posts</h2>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<?php //contents of loop ?>
<article id="post-<?php the_ID(); ?>"<?php post_class(); ?>>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
<a href="<?php the_permalink(); ?>"> Read More...</a>
</article>
<?php endwhile; ?>
<?php rewind_posts(); ?>
</section>
<?php }
}
}
add_action( 'woocommerce_after_shop_loop', 'tutsplus_display_posts_in_category_archives' );
现在保存您的插件文件,并在存档页面中查看添加了帖子的产品类别。 在我的服装类别档案库中,如果我向下滚动浏览产品,则会显示我的帖子:
![显示在类别存档页面上的博客文章](https://i-blog.csdnimg.cn/blog_migrate/0e3afdf89a27c0184864e5d30efc6fe9.png)
现在,您可以在其存档页面上显示有关该产品类别的最新博客文章。
摘要
与商店的各个部门集成的博客可以帮助您销售更多产品,并使博客与客户更相关。 在本教程中,您学习了如何将博客文章添加到类别存档页面,从而为客户提供额外的内容。