こんにちは、
具体的にどのような事をやりたいのかちょっと理解できないんですが、WordPress4.7から
投稿タイプテンプレートという機能が実装されました。
http://tenman.info/labo/snip/archives/8984
なんかのヒントになりますか?
ご回答ありがとうございます。確認させて頂きます。
やりたいことはloop-products.phpの商品のループを<?php get_template_part(‘loop’, ‘products’); ?> で一覧表示してtopページやpage.phpに記載して使いまわして表示したいです。
archive-products.phpの商品一覧ページは問題なく表示されているので
メインループ(メインクエリ?)とサブループというのの問題な気もしますがよくわかりません。
いろんな本に、<?php get_template_part(‘loop’, ‘hoge’); ?> でテンプレートパーツを取得して表示する方法が
記載されているので可能な気がするのですが、
バージョンを一番新しいので制作したのでそのせいですかね。。
functions.phpに
<?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;
?>
ショートコード作ればどうなんでしょう。
[productslist post_type=product post_per_page=5 term_id=hoge]
みたいな。
本文中に書くとかすればいいのでは。
テンプレートの中だとdo_shortcodeとか使うのかな。
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; ?>
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があるので、不要ということでしょうか。
もしよかったらご回答頂けると幸いです。
@oisit 様
ご回答ありがとうございます。
やりたいのはそんな感じのことです。ご提示頂いたコードは管理画面の固定ページや投稿で使うタイプのものですよね。仰せのとおり今回はテンプレートの中で使いたいのです。
do_shortcode 調べて見ます。どうもありがとうございました。