サポート » 使い方全般 » カスタム投稿のテンプレートパーツを使いまわしたい

  • お世話になります。
    カスタム投稿で商品一覧を作成しました。
    表示するのは画像とタイトルと金額ぐらい、topページや固定ページなどあらゆるところで使うので使いまわしたいです。

    以下のような構成です。

    ・ front-page.php トップページ
    ・ loop-products.php 各商品
    ・ archive-products.php 商品一覧
      <?php get_template_part(‘loop’, ‘products’); ?> で取得
    ・ single-products.php 各商品詳細ページ

    <?php get_template_part(‘loop’, ‘products’); ?>
    上記をそのままペロッとはってもうまく行きませんが、
    件数などを指定して記載して表示する方法はわかるのですが、上記のようになにか簡略化して書く方法は
    ないでしょうか。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • こんにちは、

    具体的にどのような事をやりたいのかちょっと理解できないんですが、WordPress4.7から

    投稿タイプテンプレートという機能が実装されました。

    http://tenman.info/labo/snip/archives/8984

    なんかのヒントになりますか?

    トピック投稿者 rurikabuto

    (@rurikabuto)

    ご回答ありがとうございます。確認させて頂きます。

    やりたいことはloop-products.phpの商品のループを<?php get_template_part(‘loop’, ‘products’); ?> で一覧表示してtopページやpage.phpに記載して使いまわして表示したいです。

    archive-products.phpの商品一覧ページは問題なく表示されているので
    メインループ(メインクエリ?)とサブループというのの問題な気もしますがよくわかりません。
    いろんな本に、<?php get_template_part(‘loop’, ‘hoge’); ?> でテンプレートパーツを取得して表示する方法が
    記載されているので可能な気がするのですが、
    バージョンを一番新しいので制作したのでそのせいですかね。。

    functions.phpに

    Honda

    (@rocketmartue)

    <?php get_template_part('loop', 'products'); ?>で loop-products.php の取得は出来ますが
    問題は、loop-products.php を呼び出す前後のコードと、loop-products.php の中身のコードがどうなっているかです。
    インクルードタグ
    ループ

    archive-products.php では、

    <?php while ( have_posts() ) : the_post(); ?>
    
    <?php get_template_part('loop', 'products'); ?>
    
    <?php endwhile; // end of the loop. ?>

    のようになっていると思いますが、
    front-page.php や single-products.php の場合は、

    <?php
    $args=array(
    	'post_type' => 'products', //カスタム投稿タイプ
    	'posts_per_page'=> 8, //表示件数 すべて表示する場合は -1
    );
    query_posts($args);
    if(have_posts()):
    while(have_posts()): the_post(); ?>
    
    <?php get_template_part('loop', 'products'); ?>
    
    <?php endwhile; endif;
    wp_reset_query(); ?>

    のようになります。
    $args のパラメータについては、以下を参照してください。
    テンプレートタグ/query posts
    WP_Query クラスのパラメータの説明

    余談ですが、query_posts をテーマの中で使うのは推奨されていません。

    
    <?php
    $args = array(
    	'post_type' => 'products', //カスタム投稿タイプ
    	'posts_per_page'=> 8, //表示件数 すべて表示する場合は -1
    );
    $product_query = new WP_Query($args);
    if( $product_query->have_posts() ): 
    while( $product_query->have_posts() ): $product_query->the_post(); ?>
    
    <?php get_template_part('loop', 'products'); ?>
    
    <?php 
    endwhile;
    wp_reset_postdata();
    endif;
    ?>
    
    Honda

    (@rocketmartue)

    @toro_unit
    補足ありがとうございます。

    ショートコード作ればどうなんでしょう。
    [productslist post_type=product post_per_page=5 term_id=hoge]
    みたいな。
    本文中に書くとかすればいいのでは。
    テンプレートの中だとdo_shortcodeとか使うのかな。

    トピック投稿者 rurikabuto

    (@rurikabuto)

    RocketMartue様

    ご回答ありがとうございます。
    メインループとは別なので、
    <?php get_template_part('loop', 'products'); ?> 単体では動かず別に作成が必要でサブループを作る、と理解しましたが間違ってます?

    ちないにloop-products.php の中身は以下のような普通の内容です。

    <?php
    if ( have_posts() ) :
        while ( have_posts() ) : the_post();
    ?>
    <div id="post-<?php the_ID(); ?>"
    中身中身中身中身
    </div>
    <?php
        endwhile;
    endif; ?>
    
    トピック投稿者 rurikabuto

    (@rurikabuto)

    Toro_Unit (Hiroshi Urabe)様

    補足ありがとうございます。 お礼が遅くなり失礼しました。
    query_postsを使うのは古い情報のサイトや本などによく掲載されてますね。
    ページ送りに支障があったりループを2回取りに行ってしまう?など諸々の理由で現在は非推奨であり
    通常、WP_Query や get posts を使う、ということは存じております。(知識はあるのですが、実行が伴わないんです。(汗)

    それから、ちなみにですが頂いたサンプルコードのif〜〜whileがあると延々無限にループしてしまいますので
    それを削除して以下のようにしたところ、

    <?php
    $args = array(
         'post_type' => 'products', // 投稿タイプ
         'posts_per_page' => 4, // 表示するページ数
    ); ?>
    <?php $wp_query = new WP_Query( $args ); ?><!-- クエリの指定 -->
    <!-- ここに表示するタイトルやコンテンツなどを指定 -->
    <?php get_template_part('loop', 'products'); ?>
    <?php wp_reset_postdata(); ?><!-- リセット -->

    以下のページすべてで希望の表示にはなったのですが、
    (topページ:front-page.php、当該投稿シングルページ:single-products.phpや、固定ページ:page.php)
    これはloop-products.phpの中にすでに
    if〜〜whileがあるので、不要ということでしょうか。
    もしよかったらご回答頂けると幸いです。

    トピック投稿者 rurikabuto

    (@rurikabuto)

    @oisit

    ご回答ありがとうございます。
    やりたいのはそんな感じのことです。ご提示頂いたコードは管理画面の固定ページや投稿で使うタイプのものですよね。仰せのとおり今回はテンプレートの中で使いたいのです。
    do_shortcode 調べて見ます。どうもありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「カスタム投稿のテンプレートパーツを使いまわしたい」には新たに返信することはできません。