然而,我不知道Drupal,在我看来,Drupal中的“节点”是WordPress中的“post类型”。
默认情况下,WordPress有几种帖子类型:帖子、页面、附件、菜单项、修订(这些帖子类型通常被称为“内置”)。
您可以注册任意数量的自定义帖子类型,即CPT。
数据库中的Post类型彼此不同,只是因为posts表中的“Post\\U type”列不同。
然而,他们的“行为”可能非常不同,这取决于帖子类型registration arguments.
因此,您可以将帖子类型分为层次式和非层次式、需要特定用户能力才能编辑的帖子类型、帖子类型“public”和非public等等。
例如,菜单项和修订不是公共的:默认UI是隐藏的,WordPress为它们提供了不同的UI。
在WordPress中,每一篇文章,无论类型如何,都有作者。(就我所知,就像Drupal中的节点有作者一样)。
文章与作者的关系是一对多(一篇文章只能有一位作者,而一位作者可以有多篇文章)。在数据库中,此关系通过post_author
字段在post表中。
该字段引用了users表中的ID:因此帖子的唯一作者是用户:有用户名、密码、配置文件等。
在您的情况下,“Book”应该是post类型,并且if it\'s good for you that book author is a real user, you can use link books and authors using the post author field.
这将很容易做到,因为默认的后期创建/编辑UI有一个字段来设置用户,并且还有一些默认的模板标记可以使用(如the_author
和related).
此外,您可以使用template hierarchy 轻松自定义作者存档(在WordPress中,“存档”是显示一组共享功能的帖子的网页:分类法存档是显示具有相同分类法的帖子的页面,就像作者存档是显示特定作者帖子的页面一样)。
如果你的作者不是真人,但只是连接书籍的一种方式,你可以考虑使用不同的方法,因为如果书籍作者是帖子作者(所以是用户),他们应该有一封电子邮件、一个帐户等等。。。
事实上,替代方法是为作者使用另一种帖子类型,或者使用分类法。
分类法是WordPress中的另一种“实体”。每个分类法都可以有无限的术语(就像avery post type可以有无限的帖子一样)。类别和标记是两种默认分类法,但您可以register unlimited custom taxonomies.
关于帖子与其他帖子的连接方式,在WordPress中,开箱即用,您必须:
岗位一对多关系same 帖子类型:这是一种父子关系,您只需将帖子类型注册为层次结构即可设置。例如WordPress页面第二种类型是一种使用分类学的“间接”多对多关系。您可以将相同的分类术语分配给不同的帖子(即使是不同的帖子类型),并检索或显示共享相同术语的帖子,“连接”它们。例如,您可以为每一位图书作者创建一个分类法,并将该分类法分配给图书,而不是使用分类法存档来显示帖子因此,如果你的书的作者不是真正的用户,那么分类法是正确的选择。
现在是WooCommerce的“问题”(或者更好的是,你可能会遇到WooCommerce的问题)。该插件注册一个post类型来处理产品,cpt名称为“product”。
如果你注册了一个定制的post类型的书籍,那么你就不能在WooCommerce中销售它们,因为只有“产品”(post类型为“product”)可以使用该插件进行开箱销售。
我不知道是否有任何插件允许出售其他自定义帖子类型。然而,解决这个问题的一个简单方法是在书籍和
注册一个名为“产品类型”的自定义分类法,并在其中创建术语“图书”,一个可能更好的选择是为图书创建自己的WooCommerce产品类型。See this WPSE answer 通过@helgatheviking. WooCommerce产品类型是插件用来处理具有不同功能(简单、可变、可下载等)的产品的方式关于将图书产品连接到图书作者,如果您使用post-author,则只需指定正确的作者,然后在需要显示指向作者存档使用的链接时the_author_link
模板标记。如果使用分类法,则使用get_term_link
要显示的模板标记,然后链接到相关存档。
还有一个我还没有提到的选择。如果书籍作者不是真正的用户(因此您不使用pos author字段),并且您希望创建一个作者档案(显示所有作者的页面)以及每个作者的“单一视图”(例如,包含作者传记、信息、照片等的页面)可能您必须为作者创建另一个帖子类型。这可能是一个问题:正如前面所说,WordPress中没有一个现成的系统可以直接将帖子与不同的帖子类型(在您的例子中是“产品”和“作者”)连接起来。
一个著名的插件,Posts2Posts 可以帮助解决此问题,或者您可以使用自定义元字段(可能是\'book_author_id\'
) 关于产品(或书籍)的帖子类型。在这种情况下,可以使用以下命令在循环(产品存档或产品单页)中显示指向相关作者页的链接get_permalink
结合get_post_meta
, 类似于:
$author = get_post( get_post_meta( get_the_ID(), \'book_author_id\', TRUE) );
$title = apply_filters(\'the_title\', $author->post_title);
$link = get_permalink($author);
echo \'<a href="\' . $link . \'" title="\' . $title. \'">\' . $title. \'</a>\';
之后,在单作者模板中(根据模板层次结构
\'single-author.php\'
您可以使用自定义
WP_Query
使用
\'meta_query\' 参数,类似于:
// single-author.php
the_post();
<h1>Author Name: <?php the_title() ?></h1>
<h2>Author Info</h2>
<div><?php the_content() ?></div>
<h2>Books by <?php the_title() ?></h2>
<?php
$args = array(
\'post_type\' => \'products\',
\'meta_query\' => array(
\'meta_key\' => \'book_author_id\',
\'meta_value\' => get_the_ID()
)
);
$books = new WP_Query( $args );
if ( $books->have_posts() ) : while( $books->have_posts() ) : $books->the_post();
?>
<div class="book">
<h3><?php the_title() ?></h3>
<p><?php the_excerpt() ?></p>
<a href="<?php the_permalink() ?>">Details</a>
</div>
<?php endwhile; wp_reset_postdata(); else: ?>
<div>Sorry, <?php the_title() ?> has no books.</div>
<?php endwif; ?>
但是,如果书籍作者是真正的用户(应该在网站上有一个帐户),我强烈建议使用post-author将书籍与书籍作者连接,如果您需要一些作者存档信息,可以使用
author description 用户配置文件页面中的字段,并使用
custom page template 与
WP_User_Query
如果您想显示所有书籍作者的档案。