分类标准名称相同的WP查询公告类型

时间:2013-10-17 作者:Troy Templeman

这就是我所拥有的:

带有分类/类别“流派”和“作者”的自定义帖子类型“书籍”

  • 另一个自定义帖子类型“作者”,包含所有作者图片和bios

    在单一的“图书”页面上,有一个侧栏,其中有图书“作者”图片和个人简历

    我想应该是这样的:

       $bookauthor = wp_get_post_terms($post->ID, \'author\', array("fields" => "slug"));
       $custom_query = new WP_Query(array(
       \'post_type\' => \'authors\',
       \'name\' => $bookauthor
    
    或者这个:

       $bookauthor = wp_get_post_terms($post->ID, \'author\');
       $bookauthorslug = $bookauthor[0]->slug;
       $custom_query = new WP_Query(array(
       \'post_type\' => \'author\',
       \'name\' => $bookauthorslug
    
    但两者都不起作用。

  • 1 个回复
    最合适的回答,由SO网友:gmazzap 整理而成

    可能你做错了。

    当你需要一对多的关系时(一个作者有很多书),分类法不是最好的方法。

    此外,根据WordPress的结构,以相同的方式命名分类法和帖子并不是一种非常可靠的方式。

    举个例子,如果两个作者是同音词:两个作者都叫“John Smith”是完全正常的,在这种情况下,WordPress将为分类术语和post slug分配唯一的slug,但对于您来说,在创建post时很难分配正确的分类术语。

    最好的方法是为book post类型创建一个自定义字段,您可以将其命名为“author\\u id”,并在创建book post期间插入righr post id,然后在book page中使用:

    $author_id = get_post_meta( $post->ID, \'author_id\', true );
    $author_post = get_post($author_id);
    
    当然这不是很好的解决方案,但是creating a custom metabox 要设置显示作者帖子下拉列表的元字段,很容易,而且很美观。

    如果需要有关创建metabox的帮助,请查看questions tagged metabox 在此网站中。

    作为替代方案,您还可以考虑著名的插件Post 2 Posts 这将为你做这项工作。

    回答您的问题,您的第二个代码块几乎是正确的,工作版本(应该工作的版本)是:

    global $post;
    $bookauthor = wp_get_post_terms( $post->ID, \'author\' );
    if ( ! empty($bookauthor) ) {
      $slug = array_shift( $bookauthor );
      $custom_query = new WP_Query( array( \'post_type\' => \'author\',\'name\' => $slug->slug ) );
      // here your loop
      while ( $custom_query->have_posts() ) { $custom_query->the_post();
         // here post output
      }
      wp_reset_postdata();
    }
    
    这是因为IIRCwp_get_post_terms 使用术语ID作为数组键返回数组。

    但是,如前所述,我认为这不是正确的方法。

    结束

    相关推荐

    确定正在加载的模板-{slug}.php

    我正在尝试制作一个个人插件,根据加载的内容执行特定的操作。在本例中,如果当前加载的页面使用template-blog.php 模板,如果是单个博客帖子(加载single.php 执行第二个功能,其他任何操作都执行第三个功能我不太确定我需要使用什么方法,到目前为止谷歌还没有找到正确的方法。我一直在尝试get\\u current\\u template()、get\\u template()和get\\u page\\u template(),但他们都没有找到我上面要找的东西。