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

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

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

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

WordPress

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

PHP

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

Q&A

1回答

1818閲覧

WordPressのプラグインBuddyPressでfeedの出力内容をカスタマイズするには

honda5352

総合スコア4

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/02/08 09:11

BuddyPressでサイトAをツイッター風にSNS化して、全ユーザーのつぶやきをRSSでタイムライン形式に20件、サイトBに読み込んでいます。

とあるユーザーが連投する事から、サイトBに読み込んでいるつぶやきの一覧がそのユーザー一色になってしまい
対策として「全ユーザーのつぶやきを最新順から全20件」という現在のfeedの出力内容を
「全ユーザーのつぶやきを最新順から各ユーザー1件まで、全20件」という条件に変更したいと考えています。

BuddyPressのfeedの出力自体は「class-bp-activity-feed.php」で管理されていて、以下がそのソースになります。

■「class-bp-activity-feed.php」のソース
https://github.com/buddypress/BuddyPress-build/blob/master/bp-activity/classes/class-bp-activity-feed.php

bp_has_activities()という独自の関数が使われていて、現在はその関数を以下のようにカスタマイズして
ループ内でアクティビティの更新(つぶやき投稿)のみを表示させるようにしています。

php

1<?php if ( bp_has_activities( $this->activity_args ) ) : ?> 2

php

1<?php if ( bp_has_activities( bp_ajax_querystring( 'activity' ).'&action=activity_update' ) ) : ?> 2

■参考URL
https://codex.buddypress.org/developer/loops-reference/the-activity-stream-loop/

ここから更に条件を追加して「各ユーザーの投稿を最大1件まで」とできれば問題解決なのですが、
どのような条件式を記述すればいいのか分かりません。

お恥ずかしながらphpの知識に関しては、ほとんど素人です。
ネットの情報を頼りに「この部分をこうすればこんな風な結果が得られるかも」と何となく感覚的に総当たりで試してこれまで何とかなってきましたが
理論的には理解していないので、ネットに情報が殆どない今回のケースでは行き詰ってしまった次第です。

何卒、皆様のお知恵を拝借させていただきたく、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

WordPress で各投稿者から1件ずつ取得するのであれば、WordPress の実行する SQL に group by post_author をつければ、post_author(投稿者)でグループ化されるので、各投稿者から1件を取得することが可能です。


BuddyPress が、どの様に feed ( RSS ) を出力しているのか確認していませんが...

BuddyPress が、WordPress 標準機能の feed 機能をカスタマイズして利用しているのであれば、 is_feed() で、feed を出力していると判断できるので、feed の場合だけ group by post_author を追加するように

function post_groupby_348940 ( $groupby ){ if( is_feed() ){ global $wpdb; return "{$wpdb->posts}.post_author"; } } add_filter( 'posts_groupby', 'post_groupby_348940' );

と posts_groupby フックを利用して追加することで、feed 時に各投稿者から1件ずつ取得することができるのではないかと思います。

投稿2020/02/08 11:00

編集2020/02/08 11:05
CHERRY

総合スコア25171

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

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

honda5352

2020/02/09 06:21

ご回答ありがとうございます。 ご提示いただいたコードをfunctions.phpに追加してみたのですが、feedの出力内容に変化はありませんでした。 ひょっとしてらBuddyPress が、WordPress 標準の feed 機能を使用していないのかもと思い、調べた所、 どうも「bp_activity_sitewide_feed」という関数を使用する事で「class-bp-activity-feed.php」で出力しているfeedの情報にフックできるようです。 ■参考URL http://hookr.io/functions/bp_activity_sitewide_feed/ 試しに「is_feed」の部分を「bp_activity_sitewide_feed」に置き換えて再度試してみた所、 feedの出力内容自体は変わったのですが、XMLの形式でもない別物の表記に変わってしまい、 rssで読み込んでいる部分も表示されませんでした。 無知な質問で度々申し訳ありません、解決策がございましたらご教授いただけますと幸いです。 何卒よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問