WordPress
カスタム投稿タイプのテンプレートを作成する
サーチ…
カスタム投稿タイプの本のためのカスタムテンプレートの作成
私たちのカスタム投稿の種類の単一の投稿のテンプレートを作成するには、single -post_type_name .phpというファイルを作成する必要があります。ここで、 post_type_nameはカスタム投稿の種類の名前です。
たとえば、カスタムポストタイプが "Books"と呼ばれる場合、single- book .phpというPHPファイルを作成する必要があります。カスタムポストタイプの特異な名前を使用したことに注意してください。
テーマフォルダからsingle.phpの内容をコピーし、新しいテンプレートに貼り付けて保存します。テンプレートはカスタム投稿タイプの個別ページに適用されます。
カスタムポストタイプテンプレート
カスタム投稿タイプアーカイブ:
カスタム投稿タイプのアーカイブテンプレートを作成するには、 register_post_type()
関数でhas_archive
引数をtrue
に設定する必要があります。以下の例では、カスタム投稿タイプがイベント投稿タイプ用に作成されています。
add_action( 'init', 'create_events_post_type' );
function create_events_post_type() {
register_post_type( 'event',
array(
'labels' => array(
'name' => __( 'Events' ),
'singular_name' => __( 'Event' )
),
'public' => true,
'has_archive' => true,
)
);
}
するには、テンプレートの作成新しいカスタムポストタイプ用の新しいテンプレートファイルを作成する必要があります。単一の投稿ページのテンプレートを作成するには、アーカイブの名前をsingle-{post_type}.php
とarchive-{post_type}.php
とします。
アーカイブテンプレートのファイル名はarchive-event.php
、イベントページはsingle-event.php
ます。両方のファイルはあなたのテーマのルートディレクトリにあるはずです。
アーカイブテンプレートの例は、次のようになります。 21世紀のテーマから抜粋 。
<?php
/**
* The template for displaying archive pages
*
* @link https://codex.wordpress.org/Template_Hierarchy
*
* @package WordPress
* @subpackage Twenty_Seventeen
* @since 1.0
* @version 1.0
*/
get_header(); ?>
<div class="wrap">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<?php
the_archive_title( '<h1 class="page-title">', '</h1>' );
the_archive_description( '<div class="taxonomy-description">', '</div>' );
?>
</header><!-- .page-header -->
<?php endif; ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
if ( have_posts() ) : ?>
<?php
/* Start the Loop */
while ( have_posts() ) : the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/post/content', get_post_format() );
endwhile;
the_posts_pagination( array(
'prev_text' => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
'next_text' => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
) );
else :
get_template_part( 'template-parts/post/content', 'none' );
endif; ?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
</div><!-- .wrap -->
<?php get_footer();
カスタム投稿タイプシングルテンプレート:
次に、単一のテンプレートの例を示します。 21世紀のテーマから抜粋 。
<?php
/**
* The template for displaying all single posts
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
*
* @package WordPress
* @subpackage Twenty_Seventeen
* @since 1.0
* @version 1.0
*/
get_header(); ?>
<div class="wrap">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
/* Start the Loop */
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/post/content', get_post_format() );
// If comments are open or we have at least one comment, load up the comment template.
if ( comments_open() || get_comments_number() ) :
comments_template();
endif;
the_post_navigation( array(
'prev_text' => '<span class="screen-reader-text">' . __( 'Previous Post', 'twentyseventeen' ) . '</span><span aria-hidden="true" class="nav-subtitle">' . __( 'Previous', 'twentyseventeen' ) . '</span> <span class="nav-title"><span class="nav-title-icon-wrapper">' . twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '</span>%title</span>',
'next_text' => '<span class="screen-reader-text">' . __( 'Next Post', 'twentyseventeen' ) . '</span><span aria-hidden="true" class="nav-subtitle">' . __( 'Next', 'twentyseventeen' ) . '</span> <span class="nav-title">%title<span class="nav-title-icon-wrapper">' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ) . '</span></span>',
) );
endwhile; // End of the loop.
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
</div><!-- .wrap -->
<?php get_footer();
どちらのテンプレートの例でも、内部コンテンツを表示するために部分的に引っ張っています。
あなたの子/親テーマに単一の/アーカイブテンプレートがある場合は、そのテンプレートを新しいテンプレート用の定型文として使用する必要があります。