web-dev-qa-db-ja.com

カスタム投稿タイプにテンプレートを割り当ててていることはできますか?

テンプレートファイルをカスタム投稿タイプに割り当てることはできますか?

私はitemsと呼ばれるカスタム投稿タイプを作成しました、そして私はあなたがページでできるようにアイテムにテンプレートを割り当てたいと思います。

31
Odyss3us

WordPressバージョン4.7 から、カスタムページテンプレートをページとともに他の投稿タイプに割り当てることができます。

テンプレート名ファイルのヘッダーに加えてこれを実現するために、テンプレートでサポートされている投稿の種類を次のようにテンプレート投稿の種類を使用して指定できます。

<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/

あなたはそれに関するより多くの情報を次のページで得ることができます。

https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-typeshttps://make.wordpress.org/ core/2016/11/03/post-type-templates-in-4-7/

45
Vinod Dalvi

次のようにファイルを作成することで、カスタム投稿タイプ用のテンプレートを作成できます。

single-mycustomposttype.php

コーデックスの テンプレート階層 を参照してください。

_ ps _ :これは すでに に回答されています。

20
mike23

これが私のために働くものです:

add_filter('single_template', function($original){
  global $post;
  $post_name = $post->post_name;
  $post_type = $post->post_type;
  $base_name = 'single-' . $post_type . '-' . $post_name . '.php';
  $template = locate_template($base_name);
  if ($template && ! empty($template)) return $template;
  return $original;
});

したがって、カスタム投稿タイプfoobarの投稿とhello-worldのスラッグが与えられた場合、上記のコードはsingle-foobar-hello-world.phpテンプレートがあればそれをロードします。

8
Chris Carson

Googleを介してこのスレッドにアクセスする人のために、WP 4.7はすべての投稿タイプ用のテンプレートを導入しました。詳しいチュートリアルについては Make WP Core を参照してください。すべてのCPTに対して1つのテンプレートに制限されることはなくなりました。Pagesと同じように、投稿ごとに個別のテンプレートを割り当てることができます。

4
WebElaine

以下のように1つのテンプレートファイルを作成してそのtemplate-itemsという名前を付けるよりも、まず最初にItemsという投稿タイプのコンテンツを表示するページをItemsとして作成します。作成したページにそのテンプレートを選択します。

<div class="container">

    <div class="row">

        <div class="col-md-9">
            <div class="panel panel-default text-center">
                <?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>                        

                        <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
                            <?php the_title();?>
                            <?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
                            <?php the_content();?>
                        <?php endwhile; ?>

                <?php wp_reset_query(); ?>                      
            </div>
        </div>

    </div>

</div>
1
clap

これは少し古いですが、あなたもこれを試すことができます:

カスタム投稿タイプのテンプレートを作成します。

single-*custom-post-type-slug*.php

ファイルはスラッグをチェックし、ファイルが存在するかどうかを確認し、存在しない場合はデフォルトのテンプレートファイルにフォールバックします。

<?php 
    $slug = get_post_field( 'post_name', get_post() );
    $slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';

    get_template_part( 'templates/*custom-post-type-slug*/' . $slug  );
?>

custom-post-type-slug のすべてのインスタンスを、カスタム投稿タイプの実際のスラッグに置き換えます。

使いやすさと組織目的のためにこれを行います。テーマのルートフォルダにすべてのファイルを置くよりも、私にとってはきれいに見えます。

フォルダ構造の例:

themeroot
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php
1
eballeste

これは非常に簡単です。

テーマのルートディレクトリに新しいPHPファイルを作成し、これをトップに追加します。

<?php /*
 * Template Name: My custom view
 * Template Post Type: Post_typename   // here you need to add the name of your custom post type
 */ ?>

完全な例は次のとおりです。

<?php /*
 * Template Name: My custom view
 * Template Post Type: Post_typename   // here you need to add the name of your custom post type
 */ ?>
<?php get_header();?>


<div class="container pt-5 pb-5">


    <?php if (has_post_thumbnail()):?>

      <img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">

    <?php endif;?>




    <?php if (have_posts()) : while (have_posts()) : the_post();?>

        <?php the_content();?>

    <?php endwhile; endif;?>


</div>

<?php get_footer();?>
1
jerryurenaa