通过标签收集自定义帖子类型

Posted

技术标签:

【中文标题】通过标签收集自定义帖子类型【英文标题】:Gathering Custom post types via tags 【发布时间】:2015-07-06 05:50:28 【问题描述】:

我已使用以下代码设置了名为“部门”的自定义帖子类型:

register_post_type( 'sectors',
    array(
        'labels' => array(
            'name'          => __( 'Sectors' ),
            'singular_name' => __( 'sectors' ),
        ),
        'has_archive'  => true,
        'hierarchical' => true,
        'menu_icon'    => 'dashicons-heart',
        'public'       => true,
        'rewrite'      => array( 'slug' => 'your-cpt', 'with_front' => false ),
        'supports'     => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'revisions', 'page-attributes' ),
        'taxonomies'   => array( 'your-cpt-type',  'post_tag' ),
    ));

这让我可以将“标签”添加到自定义帖子类型页面。

现在,我正在尝试通过某些标签显示此自定义帖子类型的页面。

我已经设法通过使用以下代码来处理帖子:

<?php 
    $args = array('tag_slug__and' => array('featuredpost1'));
    $loop = new WP_Query( $args );
    while ($loop->have_posts() ) : $loop->the_post();
?>
<h5 class="captext"><?php the_title(); ?></h5>
<hr>

<div style="float: left; padding-right:20px;">
    <?php the_post_thumbnail( 'thumb' ); ?>
</div>

<?php the_excerpt(); ?>
<a href="<?php echo get_permalink(); ?>"> Read More...</a>

<?php endwhile; ?>
<?php wp_reset_query(); ?>

这将获取所有带有“featuredpost1”标签的帖子。

自定义帖子类型如何实现?

编辑/更新:

这确实有效,有没有办法可以在不同的页面上使用此功能?比如在我的主页上通过标签获取帖子,那么这个页面上的任何更新都会在主页上更新??

【问题讨论】:

有人有什么想法吗? 您是否已将"post-type" =&gt; "sectors" 添加到您的参数中? 您在哪个页面/模板上执行此操作。你真的需要自定义查询吗 【参考方案1】:

如果您正在寻找带有标签名称的自定义帖子类型,则需要在查询参数中指定:

  <?php $query = new WP_Query( array( "post_type" => "sectors", "tag" => "featuredpost1" ) );
        
   while ($query->have_posts()) : $query->the_post();
        
   the_title();
        
  endwhile; ?>

希望这会对你有所帮助。

【讨论】:

【参考方案2】:

Cayce K 的解决方案将完美运行。我还有第二种方式:

首先:将您的自定义帖子类型添加到主查询。您可以通过在functions.php 中添加几行来实现这一点。

<?php   
add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
    function add_my_post_types_to_query( $query ) 
        // Leave the query as it is in admin area
        if( is_admin() ) 
            return $query;
        
        // add 'sectors' to main_query when it's a tag- or post-archive
      if ( is_tag() && $query->is_main_query() || is_archive() && $query->is_main_query() )
        $query->set( 'post_type', array( 'post', 'page', 'sectors', 'add_more_here' ) );
      return $query;
    
?>

第二:这样做之后,您可以在主题中使用archive.phptag.phptag-myTagName.php 来显示该标签的存档页面,包括您的自定义帖子类型' 部门'。您无需设置特殊查询,只需将所需标签的链接添加到您的菜单之一 - 您的标准循环将完成其余工作。

提示:

如果您只想为完整的自定义帖子类型“sectors”创建存档页面,您还可以使用 WP 插件 Post Type Archive Link。

【讨论】:

很好的开箱即用的想法。这是一些有趣的知识。感谢您发布此答案!【参考方案3】:

Wordpress Query Parameters

如果你添加 ::

$args = array(
    'post_type' => array( 'sectors' ) //, 'multiple_types_after_commas' )
);
$query = new WP_Query( $args );

$query = new WP_Query( 'post_type=sectors' );

这将帮助您通过查询定位您的帖子类型。

看起来像

$args = array(
    'tag_slug__and' => array('featuredpost1'),
    'post_type' => array( 'sectors' )
);
$loop = new WP_Query( $args );
while ($loop->have_posts() ) : $loop->the_post();

【讨论】:

谢谢你,这很完美!另外,感谢 Zork 的回答和 Selva。

以上是关于通过标签收集自定义帖子类型的主要内容,如果未能解决你的问题,请参考以下文章

以自定义帖子类型显示标签面板

Wordpress - 从自定义帖子类型中删除子菜单

有没有办法查询所有自定义帖子类型标签并返回每个标签? [关闭]

使用特定标签在自定义帖子类型和分类中搜索

php 标签页上的自定义帖子类型

PHP 获取自定义帖子类型的WordPress标签/类别