6

几天来,我一直在尝试创建带有类别的自定义帖子类型。到目前为止,我已经完成了这项工作,我可以轻松地添加内容,并将其分配给一个类别。我的代码如下。

我不明白,似乎无法工作的是创建一个存档页面来显示一个类别的帖子。
例如:我的帖子类型称为Adverts。我的类别称为摄影师

页面是否可以动态计算出您所在的类别并显示属于该类别的所有自定义帖子?

function my_custom_post_advert() {
    $labels = array(
        'name'               => _x( 'Adverts', 'post type general name' ),
        'singular_name'      => _x( 'Advert', 'post type singular name' ),
        'add_new'            => _x( 'Add New', 'advert' ),
        'add_new_item'       => __( 'Add New Advert' ),
        'edit_item'          => __( 'Edit Advert' ),
        'new_item'           => __( 'New Advert' ),
        'all_items'          => __( 'All Adverts' ),
        'view_item'          => __( 'View Advert' ),
        'search_items'       => __( 'Search Adverts' ),
        'not_found'          => __( 'No adverts found' ),
        'not_found_in_trash' => __( 'No adverts found in the Trash' ), 
        'parent_item_colon'  => '',
        'menu_name'          => 'Adverts'
    );
    $args = array(
        'labels'        => $labels,
        'description'   => 'Holds our adverts and advert specific data',
        'public'        => true,
        'menu_position' => 5,
        'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'category' ),
        'has_archive'   => true,
    );
    register_post_type( 'advert', $args );  
}
add_action( 'init', 'my_custom_post_advert' );

function my_taxonomies_advert() {
    $labels = array(
        'name'              => _x( 'Advert Categories', 'taxonomy general name' ),
        'singular_name'     => _x( 'Advert Category', 'taxonomy singular name' ),
        'search_items'      => __( 'Search Advert Categories' ),
        'all_items'         => __( 'All Advert Categories' ),
        'parent_item'       => __( 'Parent Advert Category' ),
        'parent_item_colon' => __( 'Parent Advert Category:' ),
        'edit_item'         => __( 'Edit Advert Category' ), 
        'update_item'       => __( 'Update Advert Category' ),
        'add_new_item'      => __( 'Add New Advert Category' ),
        'new_item_name'     => __( 'New Advert Category' ),
        'menu_name'         => __( 'Advert Categories' ),
    );
    $args = array(
        'labels' => $labels,
        'hierarchical' => true,
    );
    register_taxonomy( 'advert_category', 'advert', $args );
}
add_action( 'init', 'my_taxonomies_advert', 0 );
4

5 回答 5

2

您基本上需要创建一个包含自定义 wp_query 的页面模板,以便 WordPress 可以确定您所在的类别。

创建页面模板后,您可以在 WordPress 管理员中创建一个页面...选择新的页面模板作为您的模板。

如果您希望类别是动态的,您可以始终设置您的页面模板以接受 $_GET 参数来确定从哪个类别显示广告。像这样:

http://example.com/adverts-listing/?mycat=photographers

或者

http://example.com/adverts-listing/?mycat=programmers

等等

这是页面模板的示例(当然这会因您使用的主题而异......这个示例是为使用二十四主题而构建的):

<?php
/**
 * Template Name: Advert Listing
 *
 */

get_header(); ?>

  <section id="primary" class="content-area">
    <div id="content" class="site-content" role="main">

    <?php
      // Set the args array for the query to happen
      $args = array(
        'post_type' => 'adverts',
        'post_status' => 'publish',
        'posts_per_page' => 10
      );

      // Dynamically set the mycat argument from a $_GET parameter
      if( isset($_GET['mycat']) ) {
        $args['tax_query'] => array(
          array(
            'taxonomy' => 'advert_category',
            'field' => 'slug',
            'terms' => $_GET['mycat']
          )
        );
      }

      // Issue the query
      $q = null;
      $q = new WP_Query($args);

      // Start the loop
      if( $q->have_posts() ) : ?>
        <header class="page-header">
          <h1 class="page-title"><?php _e( 'Advert Listing:', 'twentyfourteen' ); ?></h1>
        </header>

        <?php

        while ($q->have_posts()) : $q->the_post();
          ?>

          <article id="post-<?php the_ID(); ?>" class="post-<?php the_ID(); ?> adverts type-adverts status-publish hentry">

            <header class="entry-header">
              <a href="<?php echo get_permalink(get_the_ID()); ?>"><h3 class="entry-title"><?php the_title(); ?></h3></a>
            </header><!-- .entry-header -->

            <div class="entry-content">
              <?php the_excerpt(); ?>
            </div>

          </article>

          <?php

        endwhile;

        // Previous/next post navigation.
        twentyfourteen_paging_nav();

      else :
        // If no content, include the "No posts found" template.
        get_template_part( 'content', 'none' );

      endif;

      wp_reset_query();  // Restore global post data stomped by the_post().
      ?>

    </div><!-- #content -->
  </section><!-- #primary -->

<?php

get_sidebar( 'content' );
get_sidebar();
get_footer();
于 2014-08-11T18:00:28.047 回答
1

You should be able to navigate to /adverts. Also, has_archive should create an archives page for you.

于 2013-05-21T19:03:02.083 回答
0

为了省去很多麻烦,我过去使用的是这个自定义帖子类型插件- 它就像一个魅力:

类型让您可以通过添加内容类型、自定义字段和分类来自定义 WordPress 管理员。您将能够制作 WordPress 管理员并将其变成您自己的内容管理系统。

我使用这个自定义帖子类型存档插件

该插件将启用自定义帖子类型存档(也包括每年、每月和每天)以及提要、可自定义的标题和分页。

于 2013-05-17T16:23:11.257 回答
0

该解决方案基本上包含在StackOverflow 上其他地方的这个问题的答案中。

总而言之,构建一个自定义查询,但在 $args 数组中替换:

'cat_name' => 'Photographers'

使用分类查询,如下所示:

'tax_query' => array( array( 'taxonomy' => 'advert_category', 'field' => 'slug', 'terms' => 'photographers' ) )

当然,您也应该包含'post-type' => 'advert'在 $args 中。希望这可以帮助!

于 2014-05-29T20:51:01.933 回答
0

所以我还需要带有类别的自定义帖子类型。

下面的代码非常简单干净。从字面上复制和粘贴。然后根据您的需要进行调整。希望这对未来的人们有所帮助。

它基本上将普通的 wordpress 类别与您的自定义帖子类型联系起来。当您的客户在 wordpress 管理部分工作时,让他们变得非常容易。它还通过标签具有单独的分类法。因此,您可以选择通过所有帖子类型或帖子特定分类来分类

该代码非常不言自明。请投票给我的答案,我需要建立我的代表。谢谢你。

您必须将代码复制到您的functions.php文件中

add_action( 'init', 'create_post_types' );
    function create_post_types() {
// Custom Post 1
        register_post_type( 'companies',
            array(
                'labels' => array(
                    'name' => __( 'Companies' ),
                    'singular_name' => __( 'Company' )
                ),
            'public' => true,
            'has_archive' => true,
            )
        );
        // Default Wordpress Category Taxonomy
        register_taxonomy_for_object_type( 'category', 'companies' );
        // Post Specific Taxonomy
        register_taxonomy( 'company_category', 'companies' );
// Custom Post 2
        register_post_type( 'events',
            array(
                'labels' => array(
                    'name' => __( 'Events' ),
                    'singular_name' => __( 'Event' )
                ),
            'public' => true,
            'has_archive' => true,
            )
        );
        // Default Wordpress Category Taxonomy
        register_taxonomy_for_object_type( 'category', 'events' );
        // Post Specific Taxonomy
        register_taxonomy( 'events_category', 'events' );
// Custom Post 3
        register_post_type( 'deals',
            array(
                'labels' => array(
                    'name' => __( 'Deals' ),
                    'singular_name' => __( 'Deal' )
                ),
            'public' => true,
            'has_archive' => true,
            )
        );
        // Default Wordpress Category Taxonomy
        register_taxonomy_for_object_type( 'category', 'deals' );
        // Post Specific Taxonomy
        register_taxonomy( 'deals_category', 'deals' );
// Custom Post 4
        register_post_type( 'banners',
            array(
                'labels' => array(
                    'name' => __( 'Banners' ),
                    'singular_name' => __( 'Banner' )
                ),
            'public' => true,
            'has_archive' => true,
            )
        );
        // Default Wordpress Category Taxonomy
        register_taxonomy_for_object_type( 'category', 'banners' );
        // Post Specific Taxonomy
        register_taxonomy( 'banners_category', 'banners' );
    }

有 4 种自定义帖子类型,所以就像我说的代码非常不言自明

于 2018-03-01T10:23:16.617 回答