カスタム投稿タイプの「単一」ページを作成する
4 回答
- 投票
-
- 2012-04-26
単一のテンプレートには
single-{posttype}.php
を使用します.また、has_archive
引数をtrue
に設定して投稿タイプを登録すると、archive-{posttype}.php
を使用できます.アーカイブテンプレート.グローバル$wp_query
オブジェクトにはカスタム投稿タイプが既に入力されているため、そこにあるクエリをスキップできます.ところで、
post_type
引数にスペースがあります.これは問題になります.Use
single-{posttype}.php
for the single template. Also, if you register your post type with thehas_archive
argument set totrue
, then you can usearchive-{posttype}.php
for your archive template, which will allow you to skip that query that you have there, since the global$wp_query
object will already be populated with your custom post type.BTW, you have a space in your
post_type
argument, which will be a problem.Check out the Template Hierarchy, and consider registering your CPTs using code in a plugin rather than using a CPT UI plugin.
-
- 2015-04-10
WordPressはデフォルトのページテンプレートを使用するため、必要はありませんが、カスタムの single-cpt.phpを作成できます. ファイル.cptは
>登録済みの投稿タイプの名前です. <?php get_header(); ?> <div id="main-content" class="main-content"> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php // Start the Loop. while ( have_posts() ) : the_post(); // Include the page content template. get_template_part( 'content', 'page' ); endwhile; ?> </div><!-- #content --> </div><!-- #primary --> </div><!-- #main-content --> <?php get_sidebar(); get_footer();
There's no need as WordPress will use the default page template however you can create a custom single-cpt.php file where cpt is the name of your registered post type.
<?php get_header(); ?> <div id="main-content" class="main-content"> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php // Start the Loop. while ( have_posts() ) : the_post(); // Include the page content template. get_template_part( 'content', 'page' ); endwhile; ?> </div><!-- #content --> </div><!-- #primary --> </div><!-- #main-content --> <?php get_sidebar(); get_footer();
-
- 2012-04-26
これを(ループ内の)single.phpファイルに書き込んで、ifステートメント内で必要なフィールドをエコーアウトすることができます.
if($post_type == 'case_studies') { // you may need this to be without spaces (machine name) echo '<h1>'.get_the_title().' flavors</h1>'; // post id $post_id = get_the_ID(); get_post_meta($post_id, 'custom_field_name', true); <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a> <?php endwhile; ?> }
もう1つのオプションは、ページテンプレートを作成することです.single.phpファイルをコピーし、名前をcase_studies.php ..phpタグ内の上部に追加します.
<?php /* Template Name: Brand Output 04/12 */ ?>
次に、上記の例と同じifステートメントをsingle.phpループ内に追加します...
You could just write this into your single.php file (within the loop) and echo out whatever fields you need within the if statement.
if($post_type == 'case_studies') { // you may need this to be without spaces (machine name) echo '<h1>'.get_the_title().' flavors</h1>'; // post id $post_id = get_the_ID(); get_post_meta($post_id, 'custom_field_name', true); <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a> <?php endwhile; ?> }
Another option is t0 create a page template. Copy your single.php file and rename it case_studies.php .. at the top within php tags add:
<?php /* Template Name: Brand Output 04/12 */ ?>
and then add the same if statement within the single.php loop as the above example...
-
これは機能しますが、これは悪い習慣です.これに最も近いのは `get_template_part( 'stuff'、$post->post_type);`です.Thsi works, but it is bad, bad practice, the nearest you should ever get to this is `get_template_part('stuff',$post->post_type);`
- 0
- 2012-04-26
- Tom J Nowell
-
なぜそれが悪い習慣であるのか説明できますか?can you explain why it is bad practice?
- 0
- 2012-04-27
- Starfs
-
それは汚れたコードであり、ifelseステートメントが大量にあり、コードが重複しているためです.'content.php'のようなテンプレートファイルを作成し、 `get_template_part( 'content'、$post_type);`を実行し、 `content-case_studies.php`を使用して投稿タイプごとにオーバーライドする方がよいでしょう.Because it's unclean code, and you have a tonne of if else statements, and duplicated code. You would be better creating a template file like 'content.php', and doing `get_template_part('content',$post_type);` and using `content-case_studies.php` to override it on a per post type basis
- 0
- 2012-04-27
- Tom J Nowell
-
そうすれば、single.phpは読み取り可能なままです.それでも、適切な方法で「single-case_studies.php」を使用する方がよいでしょう.That way your single.php remains readable. Even then it would eb better ot do it the proper way and use `single-case_studies.php`
- 0
- 2012-04-27
- Tom J Nowell
-
涼しい.カスタム投稿タイプを出力するためのこの新しい方法を反映するように、テーマのコードを変更しました.ヘッドアップをありがとうcool. I changed the code in my theme to reflect this new method for outputting custom post types. thanks for the heads up
- 3
- 2012-04-30
- Starfs
-
- 2015-04-10
wordpressのカスタム投稿タイプ.基本的な4つのステップ.ステップ1:ファイルパスの場所:テーマのtheme/function.php.function.phpにコードを貼り付けます(カスタム投稿タイプを登録します)
<?php add_action( 'init', 'custom_post_type_func' ); function custom_post_type_func() { //posttypename = services $labels = array( 'name' => _x( 'Services', 'services' ), 'singular_name' => _x( 'services', 'services' ), 'add_new' => _x( 'Add New', 'services' ), 'add_new_item' => _x( 'Add New services', 'services' ), 'edit_item' => _x( 'Edit services', 'services' ), 'new_item' => _x( 'New services', 'services' ), 'view_item' => _x( 'View services', 'services' ), 'search_items' => _x( 'Search services', 'services' ), 'not_found' => _x( 'No services found', 'services' ), 'not_found_in_trash' => _x( 'No services found in Trash', 'services' ), 'parent_item_colon' => _x( 'Parent services:', 'services' ), 'menu_name' => _x( 'Services', 'services' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Hi, this is my custom post type.', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ), 'taxonomies' => array( 'category', 'post_tag', 'page-category' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post' ); register_post_type( 'services', $args ); } ?>
ステップ2:ワードプレスのテンプレートページにワードプレスのカスタム投稿タイプを表示するにはどうすればよいですか?
次のようにテンプレートページのどこにでも表示できます:
<?php $args = array( 'post_type' => 'services', 'posts_per_page' => 20 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="services-items"> <?php the_title(); if ( has_post_thumbnail( $post->ID ) ) { echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">'; echo get_the_post_thumbnail( $post->ID, 'thumbnail' ); echo '</a>'; } ?> </div> <?php endwhile; ?>
ステップ3:このような単一の投稿を表示するための新しいテンプレートを作成します
シングル-{カスタム投稿タイプ名} .php または single-services.php
ステップ4:コードをsingle-services.phpファイルに貼り付けます
<?php /* The loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <div class="main-post-div"> <div class="single-page-post-heading"> <h1><?php the_title(); ?></h1> </div> <div class="content-here"> <?php the_content(); ?> </div> <div class="comment-section-here" <?php //comments_template(); ?> </div> </div> <?php endwhile; ?>
これは、単一の投稿ページを使用したカスタム投稿タイプの例です.
Custom Post Type in wordpress.Basic four steps.Step1: File Path location : theme/function.php in your theme.Paste code in function.php (register custom post type )
<?php add_action( 'init', 'custom_post_type_func' ); function custom_post_type_func() { //posttypename = services $labels = array( 'name' => _x( 'Services', 'services' ), 'singular_name' => _x( 'services', 'services' ), 'add_new' => _x( 'Add New', 'services' ), 'add_new_item' => _x( 'Add New services', 'services' ), 'edit_item' => _x( 'Edit services', 'services' ), 'new_item' => _x( 'New services', 'services' ), 'view_item' => _x( 'View services', 'services' ), 'search_items' => _x( 'Search services', 'services' ), 'not_found' => _x( 'No services found', 'services' ), 'not_found_in_trash' => _x( 'No services found in Trash', 'services' ), 'parent_item_colon' => _x( 'Parent services:', 'services' ), 'menu_name' => _x( 'Services', 'services' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Hi, this is my custom post type.', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ), 'taxonomies' => array( 'category', 'post_tag', 'page-category' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post' ); register_post_type( 'services', $args ); } ?>
Step2: how can show wordpress custom post type in wordpress template page ?
You can show anywhere in template page like this :
<?php $args = array( 'post_type' => 'services', 'posts_per_page' => 20 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="services-items"> <?php the_title(); if ( has_post_thumbnail( $post->ID ) ) { echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">'; echo get_the_post_thumbnail( $post->ID, 'thumbnail' ); echo '</a>'; } ?> </div> <?php endwhile; ?>
Step3: Create new template for show single post like this
single-{custom post type name}.php or single-services.php
Step4: Paste code in single-services.php file
<?php /* The loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <div class="main-post-div"> <div class="single-page-post-heading"> <h1><?php the_title(); ?></h1> </div> <div class="content-here"> <?php the_content(); ?> </div> <div class="comment-section-here" <?php //comments_template(); ?> </div> </div> <?php endwhile; ?>
This is custom post type example with single post page.
わかりました.カスタム投稿タイプUIプラグインをインストールして作成しました.次に、新しい投稿を追加しました.私のテーマには、次のようなコードがあります:
さて、最初にサムネイルをクリックすると、ブラウザでリダイレクトループにあるというエラーが表示されますが、次に、このカスタム投稿の1つの投稿を表示するために作成する必要のあるファイルを正確に知りたいですタイプ.そして、そのファイルに何を入れるか.