質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2155閲覧

[wordpress]奇数かつ最後の記事一覧の表示方法を変更したい

isan

総合スコア77

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/09/20 08:01

カスタム投稿タイプの記事一覧の表示方法について詰まってしまいました。

やりたいこと

記事が奇数か偶数かによって別のclassを付け、表示方法を変更したい。
件数が偶数(2、4、6、8…)の場合は

 | 記事1 | 記事2 |
| 記事3 | 記事4 |

記事が奇数(1、3、5、7…)の場合は

 | 記事1 | 記事2 |
|    記事3    |

カスタム投稿用のテンプレートです。

作成したソースコード

functions.php

/* 最後 */ function is_last_post() { global $wp_query; return ( $wp_query->current_post+1 === $wp_query->post_count ); } /* 奇数 */ function is_odd_post() { global $wp_query; return ( (($wp_query->current_post+1) % 2) === 1 ); } /* 偶数 */ function is_even_post() { global $wp_query; return ( (($wp_query->current_post+1) % 2) === 0 ); }

 
loop-投稿タイプ.php

<?php $args = array( 'numberposts' => -1, 'post_type' => '投稿タイプ名' ); $posts = get_posts( $args ); if( $posts ) : foreach( $posts as $post ) : setup_postdata( $post ); ?> <?php if ( is_odd_post() and is_last_post() ): ?> 奇数番目かつ最後の投稿の場合に表示される内容 <?php elseif ( is_odd_post() ): ?> 奇数番目の投稿の場合に表示される内容 <?php else: ?> 偶数番目の投稿の場合に表示される内容 <?php endif; ?> <?php endforeach; endif; wp_reset_postdata(); ?>

 
結果的には、記事を3件登録すると3件全てが「偶数番目の投稿の場合に表示される内容」で表示されてしまいます。


どうすれば改善できますでしょうか。
ご教授いただきたく存じます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

get_postsglobal $wp_query; を使用しないので、そのページの元々の global $wp_query; を基準に処理されると思います。

get_posts ではなく WP_Query を使って、is_last_post関数側で引数としてそのインスタンスを受け取るように変更されてはいかがでしょうか。

PHP

1function is_last_post( $the_query ) { 2 return ( $the_query->current_post+1 === $the_query->post_count ); 3}

PHP

1$the_query = new WP_Query( $args ); 2if ( $the_query->have_posts() ) { 3 while ( $the_query->have_posts() ) { $the_query->the_post(); 4 if ( is_last_post( $the_query ) ) { 5 // 6 } 7 } 8 wp_reset_postdata(); 9}

投稿2018/09/22 08:38

kei344

総合スコア69366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isan

2018/09/26 06:16

ありがとうございます!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問