WordPress 多对多文章关系插件——posts 2 posts 基本使用方法翻译
使用Posts to Posts插件在WordPress中创建文章类型关联
在WordPress默认的数据结构中,我们可以注册多个文章类型,可以给每个文章类型分别添加自定义字段。但是各个文章类型之间没有办法关联起来,这就为文章类型带来了很大的局限性,Posts to Posts插件打破了这种局限性,可以把不通的文章类型关联起来,实现复杂多变的内容关系。在本文中,我们将创建文章和页面的连接,并用几种不同的方式显示他们。
注册连接
首先,我们需要做的就是注册连接,此操作将在文章编辑界面添加一个文章连接选择区域,在主题的functions.php
文件中,添加以下代码:
add_action('p2p_init',function(){ p2p_register_connection_type([ 'name' => 'tests', 'from' => 'game', 'to' => 'question', 'title' => [ 'from' => '试题', 'to' => '考试', ], 'from_labels' => [ 'singular_name' => __('考试','my-textdomain'), 'search_items' => __('搜索考试','my-textdomain'), 'not_found' => __('没有找到考试','my-textdomain'), 'create' => __('添加考试','my-textdomain'), ], 'to_labels' => [ 'singular_name' => __('试题','my-textdomain'), 'search_items' => __('搜索试题','my-textdomain'), 'not_found' => __('没有找到试题','my-textdomain'), 'create' => __('添加试题','my-textdomain'), ], 'admin_box' => [ 'show' => 'from', 'context' => 'advanced', ], 'sortable' => 'any', 'admin_column' => 'to', 'admin_dropdown' => 'to', ]); });
直接在functions.php
中调用的p2p_register_connection_type()
函数将不会工作,我们需要像上面代码中演示的那样,把此函数挂载到p2p_init
action上。然后,转到文章管理界面添加一些连接,如下图:

显示已连接的页面/文章
现在,您可能需要在某个地方显示这些链接,在文章页面,我们可以使用get_queried_object()
来获取当前显示的文章。下面的一段代码将在文章页面显示连接到此文章的页面。
<?php
//查找链接的页面
$connected = new WP_Query(array(
'connected_type' => 'posts_to_pages',
'connected_items' => get_queried_object(),
'nopaging' => true,
));
//显示连接的页面
if ($connected->have_posts()):?>
<h3>Related pages:</h3>
<ul>
<?php while ($connected->have_posts()): $connected->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php
wp_reset_postdata();
endif;
?>
我们也可以反过来,显示连接到当前页面的文章,代码基本上是一样的,除了放置的文件不同。
-//In single.php
+//In page.php
<h3>Related articles:</h3>
使用get_queried_object()
我们可以使用同样代码的原因是因为我们使用了一个特殊的函数get_queried_object(),该函数内置在WordPress中,根据当前所在的页面类型显示不同的结果,例如:
- 如果你在文章页面,该函数返回一个文章对象。
- 如果你在页面,该函数返回一个页面对象。
- 如果你在分类页面,该函数返回一个分类对象。
有一个相关的函数get_queried_object_id()
,该函数只返回对象ID,但是逻辑和上面介绍的是一样的。
使用get_posts()
上面的方法也可以使用get_posts()
函数实现,只需要多加一个参数-设置suppress_filters
为false。例如:
<?php
//查找相关文章
$connected = get_posts(array(
'connected_type' => 'posts_to_pages',
'connected_items' => get_queried_object(),
'nopaging' => true,
'suppress_filters' => false
));
在文章存档页面显示
上面的代码是在单页面工作的,如果你想为存档页面中的每一篇文章显示一个连接列表,你可以使用each_connected()
函数。

-
搭建一个WordPress网站需要多少成本 2023-11-06 00:09:51
-
Symlink介绍(附:如何使用Symlink进行WordPress开发) 2023-11-05 23:38:32
-
让WordPress实现数据库同步的插件:HyperDB 2023-10-24 23:40:49
-
allegro电商平台值得做吗(附:2023年Allegro注册流程指南) 2023-10-08 21:53:39
-
印度跨境电商平台有哪些(附:印度跨境电商做什么产品好) 2023-10-08 21:34:23
-
跨境电商必看的几大海外二手电商平台 2023-10-08 18:04:42
-
WordPress同城互联网产品解决方案:UBASE 2023-10-03 16:40:39
-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45
-
WordPress 6.3版本(2023年8月)性能提升了哪些? 2023-08-28 16:56:02