当前位置: 首页 > 知识库问答 >
问题:

在Wordpress中显示基于所选自定义分类法的自定义帖子

楚举
2023-03-14

在我正在构建的当前网站中,我构建了以下功能。

对当前形势给予更好的理解。

有一个叫做博客的页面。此页面显示列表中的所有博客(帖子)。所有职位的类别都有一个例外。用户可以选择一个类别。一旦用户单击它,用户将转到该类别。php并查看所有具有该特定类别的帖子。

我想创建相同的场景,但不是用自定义帖子类型。我有一个模板部分;offer-list-template.php

offer-list-template.php(在这里我得到所有的报价,并显示它们);

  <?php
      // set up or arguments for our custom query
      $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
      $query_args = array(
        'post_type' => 'Offers',
        'posts_per_page' => 10,
        'paged' => $paged
      );
      // create a new instance of WP_Query
      $the_query = new WP_Query( $query_args );
    ?>

<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); // run the loop ?>
  <?php

   //$objectData is used in post-listing-item.php

    $objectData->title = get_the_title($post);
    $objectData->content = get_the_content($post);
    $objectData->permalink = get_the_permalink($post);
    $objectData->thumbnail = get_the_post_thumbnail($post);
    $objectData->posttype = get_post_type($post);

    include(locate_template('template-parts/post-listing-item.php'));
  ?>
<?php endwhile; ?>

在同一个文件中,有一个侧边显示类别。offer\u类别是分类法slug。

  <?php $terms = get_terms( 'offer_category' );
    foreach ( $terms as $term ) {

        // The $term is an object, so we don't need to specify the $taxonomy.
        $term_link = get_term_link( $term );

        // If there was an error, continue to the next term.
        if ( is_wp_error( $term_link ) ) {
            continue;
        }

        // We successfully got a link. Print it out.
        echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a><span>('. $term->count . ')</span></li>';
    }
    ?>
    </ul

结果是:

如果用户单击分类,它将转到:taxonomy offer分类。php(分类法slug.php)

在这里我需要显示帖子(post_类型-

自定义邮件类型的注册:

//Register Custom post type for Offers.
function create_posttype_offer() {
  $args = array(
    'labels' => array(
      'name' => __('Offers', ''),
      'singular_name' => __('Offer'),
      'all_items' => __('All Offers'),
      'add_new_item' => __('Add New Offer'),
      'edit_item' => __('Edit Offer'),
      'view_item' => __('View Offer')
    ),
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'Offers'),
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => true,
    'capability_type' => 'page',
    'supports' => array('title', 'editor', 'thumbnail'),
    'exclude_from_search' => true,
    'menu_position' => 70,
    'has_archive' => true,
    'menu_icon' => 'dashicons-star-filled'
    );
  register_post_type('Offers', $args);
}
add_action( 'init', 'create_posttype_offer');

// Register Custom Categoeries for Custom Post Type Offers
function taxonomies_offer() {
$labels = array(
    'name'              => _x( 'Categories', 'taxonomy general name' ),
    'singular_name'     => _x( 'Category', 'taxonomy singular name' ),
    'search_items'      => __( 'Search Categories' ),
    'all_items'         => __( 'All Categories' ),
    'parent_item'       => __( 'Parent Category' ),
    'parent_item_colon' => __( 'Parent Category:' ),
    'edit_item'         => __( 'Edit Category' ),
    'update_item'       => __( 'Update Category' ),
    'add_new_item'      => __( 'Add New Category' ),
    'new_item_name'     => __( 'New Category' ),
    'menu_name'         => __( 'Categories' ),
    );

$args = array(
    'labels' => $labels,
    'hierarchical' => true,
    );

register_taxonomy( 'offer_category', 'offers', $args );
}
add_action( 'init', 'taxonomies_offer', 0 );

当我使用默认的帖子类型和调用类别时。包含以下代码的php将显示带有所选类别的帖子。但对于自定义的帖子类型,我找不到管理它的方法。

  <?php if (have_posts() ) : while ( have_posts() ) : the_post(); // run the loop ?>
    <?php

     //$objectData is used in post-listing-item.php

      $objectData->title = get_the_title($post);
      $objectData->content = get_the_content($post);
      $objectData->permalink = get_the_permalink($post);
      $objectData->thumbnail = get_the_post_thumbnail($post);
      $objectData->posttype = get_post_type($post);

      include(locate_template('template-parts/post-listing-item.php'));
    ?>
  <?php endwhile; ?>

这是后列表项(视图)

<article class="post-item">
     <figure>
       <?php echo $objectData->thumbnail ?>
     </figure>

     <div class="content">
       <a href="<?php echo $objectData->permalink ?>">
           <h2><?php echo $objectData->title ?></h2>
       </a>

       <p><?php echo $objectData->content ?></p>

       <div class="read-more-button">
         <a href="<?php echo $objectData->permalink ?>">read more
         <span>
           <svg class="next-arrow"><use xlink:href="#next-arrow" /></svg>
         </span>
         </a>
       </div>
     </div>
 </article>

共有2个答案

闾丘选
2023-03-14

我找到了!

我从url中获得了分类法和段塞,并在查询中使用了它。

  <?php

     $term_slug = get_query_var( 'term' );
     $taxonomyName = get_query_var( 'taxonomy' );

      $the_query = new WP_Query( array(
        'post_type' => 'offers',
        'tax_query' => array(
            array (
                'taxonomy' => $taxonomyName,
                'field' => 'slug',
                'terms' => $term_slug,
              )
            ),
          ));
      ?>

        <ul>
          <?php while($the_query->have_posts()) : $the_query->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
          <?php endwhile; wp_reset_query(); ?>
        </ul>
卢聪
2023-03-14

通过理解,您必须有一个查询,以便通过以下代码加载所有自定义分类法post:

$terms = get_terms( 
        array(
            'taxonomy' => 'offer_category',
            'hide_empty' => false,
            )
        );  

foreach ($terms as $term){
     $args = array(
           'post_type' => 'Offers',
           'tax_query' => array(
                                 array(
                                     'taxonomy' => 'offer_category',
                                     'field'    => 'slug',
                                     'terms'    =>  $term->slug,
                                  ),
                          ),
             );
      $query = new WP_Query($args);
      if($query->have_posts()): while($query->have_posts()): $query->the_post();   

            the_title();
            the_content();
      endwhile;
      wp_reset_postdata();
      endif;
 }

希望这对你有用

 类似资料:
  • 我创建了一个自定义的帖子类型(书),然后为这个特定的帖子类型创建了一个自定义分类法(book_cat)。它工作正常,但如果我单击仪表板中的所有书籍页面,则没有列显示已将书籍分配给哪些类别(book_cat)(如果有)。我需要点击每本书编辑并看到那里。 注册新职位类型功能是: 分类法是:

  • 更新2添加名称作为字段,而不是段塞,并添加the_title()只需给我一个页面标题的回声... 更新Jonnhyd23的代码非常有效!!谢谢有没有一种方法可以使术语变得动态?就像标题是阿姆斯特丹一样,我能做一些类似于

  • 我是新来的wordpress, im创建一个自定义职位与字段的custom_meta_box(位置,着装) 所以在我的自定义帖子列表中,我想查看我在custom_meta_box上创造的价值。 这是我目前的代码:

  • 我有一个自定义的帖子类型设置,有许多类别和子类别。 我试图做的是创建一个页面,显示特定类别中的所有帖子,并使用一个菜单列出所有类别子类别,以便可以过滤帖子。 我已尝试复制存档模板并将其重命名为分类法-(我的自定义分类法)。php,如果我转到slug,它会显示某些帖子,并使用

  • 我目前正在从事WordPress杂志主题的研究,我想知道最好的方法 1。根据卷和问题(例如,第1卷第1期、第1卷第2期或第1卷第3期)对文章(自定义文章类型)进行排序 2。在主页上显示当前版本(例如,第1卷第3期) 到目前为止我所做的 1。我使用链接在一起的ACF创建了一个自定义分类法(卷和问题)和一个自定义字段类型(分类法)。使用下面的代码,我能够显示分类法中的所有帖子,无论它们是在第1卷第1期

  • 我正在我的Wordpress公文包网站上工作,并为我的公文包部分创建了一个自定义帖子类型。当用户单击my portfolio链接时,会将他们带到archive-portfolio.php,其中显示我所有项目的图库;当用户单击项目时,会将他们带到single-portfolio.php,其中显示关联的项目。 一切都正常工作,样式正确,但现在我想让archive-portfolio.php上的gall