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

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

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

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

PHP

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

Q&A

2回答

439閲覧

【続】wordpressにてユーザー別の最新記事を取得し表示する方法

trialtrial

総合スコア13

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/01/22 08:32

編集2022/01/12 10:55

以前「記事を書くためのユーザーを複数設定して、そのユーザーが特定のカテゴリに投稿した記事をトップページに表示させたいのですが、投稿順にひとりのユーザーの記事がたくさん表示されるのではなく、各ユーザーの投稿がいくつあっても最新のものだけを表示させたい」という質問をさせていただき、回答していただいて、試行錯誤しています。

以下のプログラムだと、各ユーザーの投稿が一つ表示されるのですが、複数投稿あるユーザーが無視され、記事数がひとつだけのユーザーの投稿が表示されます。

php

1functions.phpに以下 2<?php 3add_filter( 'posts_groupby', function ( $groupby ) { 4 if(is_front_page()) { 5 global $wpdb; 6 return "{$wpdb->posts}.post_author"; 7 } 8} ); 9?> 10 11 12index.phpに以下 13<?php 14 $my_query = new WP_Query( array( 15 'post_type' => 'post', 16 'cat' => categoryname, 17 'posts_per_page' => '4' 18 )); 19 if( $my_query->have_posts() ) : 20 ?> 21 <div> 22 <h3>WORDPRESS</h3> 23 <ul> 24 <?php while( $my_query->have_posts() ) : $my_query->the_post(); ?> 25 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> 26 <?php endwhile; ?> 27 </ul> 28 </div> 29 <?php else : ?> 30 no posts! 31 <?php endif; ?> 32 33 34


ユーザーA・B・C・Dが複数投稿していたとして

11.01 ユーザーAの投稿
10.30 ユーザーCの投稿
10.29 ユーザーAの投稿
10.29 ユーザーBの投稿
10.28 ユーザーAの投稿
10.28 ユーザーDの投稿
10.25 ユーザーBの投稿
10.20 ユーザーDの投稿

だとすると、

11.01 ユーザーAの投稿
10.30 ユーザーCの投稿
10.29 ユーザーBの投稿
10.28 ユーザーDの投稿

と表示したいのですが、
上記では

10.30 ユーザーCの投稿
10.28 ユーザーAの投稿
10.25 ユーザーBの投稿
10.20 ユーザーDの投稿

のように古い記事のみが表示されてしまいます。

php

1functions.phpに以下 2<?php 3add_filter( 'posts_groupby', function ( $groupby ) { 4 if(is_front_page()) { 5 global $wpdb; 6 return "{$wpdb->posts}.post_author"; 7 } 8} ); 9?> 10

index.phpは特に問題がないと思うので、functions.phpのfilterが違うのかと思い思案しております。
投稿者の新しい投稿、という条件式の指定方法などあるのでしょうか?

追記
現在の投稿一覧画面、実際の画面になります。
イメージ説明
イメージ説明
イメージ説明

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

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

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

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

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

guest

回答2

0

何順かを指定していないからかと。

'post_type' => 'post', 'cat' => categoryname, 'posts_per_page' => '4'

'post_type' => 'post', 'cat' => categoryname, 'posts_per_page' => '4' 'orderby' => 'date', 'order' => 'DESC'

投稿2019/01/22 11:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

trialtrial

2019/01/22 14:05

お返事ありがとうございます。 順番を指定してみましたが、表示されるのは複数投稿のうち投稿時間が早いもの(古いもの)になります。 … 'order' => 'ASC' … など試してみましたが、同じ結果になりました。 記事の表示はひとつになっているので、投稿時間が新しいもの、という条件が入ればいいと思い検討しております。
momosiri

2019/01/22 17:19

例えば作者Aの11/1と10/29の投稿カテゴリーが違ったり複数だったり、公開日ではなく更新日だったり・・・なんていうことはないですかね??
trialtrial

2019/01/22 23:40

お返事ありがとうございます。 そうですね、そのあたりは確認済みです。ちなみに管理画面、ページのスクリーンショットを本文に追加しましたので、見ていただければと思います。
guest

0

「ユーザーごとに」「1件ずつの最新投稿を」「〇件表示する」ということですよね(違ったら参考にならないと思いますのであしからず)。

コードそのものとしての回答ではありませんが、こちらのテンプレートが参考になると思います(英語サイトです)

http://www.scottbressler.com/blog/2011/03/wordpress-archive-page-with-all-authors-and-all-posts/

これで「ユーザーごとに」「1件ずつの最新投稿を」「〇件表示する」という条件でのユーザー一覧が表示できますので、あとはコードを読み解いて件数の設定とカテゴリーの限定をすればいいのではないでしょうか??

そのページからphpファイルとしてダウンロードできます。そのphpファイルでいうと47行目の条件指定で表示する件数の指定ができますので、そこでカテゴリーも限定すればいいかと思います。

※コードを完全理解しているわけではないので参考程度に・・・

投稿2019/01/23 15:27

momosiri

総合スコア1509

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問