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

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

ただいまの
回答率

89.99%

rssで取得した投稿者名ごとにアイコンを変えて表示するには

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 189

suzushiro

score 6

現在制作中のWordpressサイトのトップページに
画像のようにrssにて投稿記事一覧を表示しようとしています。

イメージ説明
記事左のアイコン部分について、現在すべて仮の同じアイコンを並べたものですが
こちらのアイコンを、投稿者名別に分岐を作り、投稿者ごとにそれぞれ決まったアイコンを
表示したいと考えています。

そこで、日本語の投稿者名ごとにあらかじめ分岐の設定を行い、
これを以下のrss取得コードに当てはめればと思った次第です。

当方PHPの知識もないため、
具体的なというかそのものの分岐コード及びrss取得コードへのコードの追加について
ご教授いただきたく思います。

拙い質問で申し訳ございません。
よろしくお願いいたします。

追記:
不明点としては、別サイトのrssから読み取った投稿者名(日本語表記)からそれぞれあらかじめ決められたアイコン画像への紐付けするためのコードの記述です。これが条件分岐に当たるものかもわかっておらず。さらにそのアイコン画像を該当記事のタイトル前に表示するためにrss取得コードへの組み込み方法です。
PHPについての記述のルールはまったく知識外となっています。

<?php
include_once ABSPATH . WPINC . '/feed.php';
$feed = fetch_feed('http://oshimax.jp/feed/?post_type=groupsinfo');
if (is_wp_error($feed)) {
    $maxitems = 0;
} else {
    $maxitems = $feed->get_item_quantity(4);
    $items = $feed->get_items(0, $maxitems);
}
?>
<h4 class="content-title">新着情報</h4>
<?php if ($maxitems): ?>
<div class="news">
<?php foreach ($items as $item): ?>
<div class="rss-wrap">
<div class="circle"><span><img src="<?php bloginfo('template_directory');?>/img/user_sankusu.png" /></span></div> // こちらが現在仮で入っているアイコン部分
<div class="rss-text">
<p class="date"><?php echo $item->get_date('Y/m/d'); ?></p>
<p class="title"><a href="<?php echo $item->get_permalink(); ?>" target="_blank">
<?php echo mb_strimwidth($item->get_title(), 0, 70, '…'); ?></a></p>
</div>
</div>
<?php endforeach; ?>
</div>
<?php else: ?>
<?php endif; ?>


条件分岐の想像するコード

<?php elseif(投稿者の日本語名-サンクス高田): ?>
<img src="<?php echo get_template_directory_uri(); ?>/img/group_icon/sankusu.png">
<?php endif; ?>
<?php elseif(投稿者の日本語名-みんなでいきる): ?>
<img src="<?php echo get_template_directory_uri(); ?>/img/group_icon/minnadeikiru.png">
<?php endif; ?>
<?php elseif(投稿者の日本語名-武蔵野酒造): ?>
<img src="<?php echo get_template_directory_uri(); ?>/img/group_icon/musashino.png">
<?php endif; ?>
<?php elseif(投稿者の日本語名-井手塾): ?>
<img src="<?php echo get_template_directory_uri(); ?>/img/group_icon/idejuku.png">
<?php endif; ?>
↓必要分を記載
object(SimplePie_Item)#4596 (3) { ["feed"]=> object(SimplePie)#4561 (28) { ["data"]=> array(6) { ["child"]=> array(1) { [""]=> array(1) { ["rss"]=> array(1) { [0]=> array(6) { ["data"]=> string(3) " " ["attribs"]=> array(1) { [""]=> array(1) { ["version"]=> string(3) "2.0" } } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" ["child"]=> array(1) { [""]=> array(1) { ["channel"]=> array(1) { [0]=> array(6) { ["data"]=> string(319) " " ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" ["child"]=> array(3) { [""]=> array(7) { ["title"]=> array(1) { [0]=> array(5) { ["data"]=> string(40) "各社からのお知らせ – OSHIMAX!" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["link"]=> array(1) { [0]=> array(5) { ["data"]=> string(17) "http://oshimax.jp&quot; ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["description"]=> array(1) { [0]=> array(5) { ["data"]=> string(27) "Just another WordPress site" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["lastBuildDate"]=> array(1) { [0]=> array(5) { ["data"]=> string(31) "Tue, 27 Aug 2019 04:11:06 +0900" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["language"]=> array(1) { [0]=> array(5) { ["data"]=> string(2) "ja" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["generator"]=> array(1) { [0]=> array(5) { ["data"]=> string(30) "https://wordpress.org/?v=4.9.1&quot; ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["item"]=> array(100) { [0]=> array(6) { ["data"]=> string(39) " " ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" ["child"]=> array(5) { [""]=> array(6) { ["title"]=> array(1) { [0]=> array(5) { ["data"]=> string(90) "「うみまち茶屋」に行ってきました★みんなのリハビリセンター★" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["link"]=> array(1) { [0]=> array(5) { ["data"]=> string(42) "http://oshimax.jp/archives/groupsinfo/8234&quot; ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["comments"]=> array(1) { [0]=> array(5) { ["data"]=> string(51) "http://oshimax.jp/archives/groupsinfo/8234#comments&quot; ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["pubDate"]=> array(1) { [0]=> array(5) { ["data"]=> string(31) "Mon, 26 Aug 2019 10:10:20 +0000" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["guid"]=> array(1) { [0]=> array(5) { ["data"]=> string(46) "http://oshimax.jp/?post_type=groupsinfo&amp;p=8234&quot; ["attribs"]=> array(1) { [""]=> array(1) { ["isPermaLink"]=> string(5) "false" } } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } ["description"]=> array(1) { [0]=> array(5) { ["data"]=> string(324) "8月23日(金) 大潟区で実施されている「うみまち茶屋」に 講師として参加してきました!! うみまち茶屋とは・・・大潟区の地域包括支援センターが主催で 認知症者や家族、地域の方々を対象としたカフェスタイルの交流場所です […]" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } } ["http://purl.org/dc/elements/1.1/&quot;]=&gt; array(1) { ["creator"]=> array(1) { [0]=> array(5) { ["data"]=> string(21) "みんなでいきる" ["attribs"]=> array(0) { } ["xml_base"]=> string(0) "" ["xml_base_explicit"]=> bool(false) ["xml_lang"]=> string(0) "" } } } ["http://purl.org/rss/1.0/modules/content/&quot;]=&gt; array(1) { ["encoded"]=> array(1) { [0]=> array(5) { ["data"]=> string(4907) " 
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/08/27 17:47

    んー。全角半角、大文字小文字ですらプログラムからしたら別のものですから、
    画像名も「rssから取得できて、且つ、半角英数で、且つ、一意のもの」をつけないとかなり難しいと思います。

    キャンセル

  • suzushiro

    2019/08/27 17:54

    情報不足でしたが、rss取得先のサイト(Wordpress)も自分で管理していまして、すべての会社名は把握できている状態です。ですので不明な投稿者名はないという前提です。

    キャンセル

  • kei344

    2019/08/27 23:42

    ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。

    キャンセル

回答 1

+1

データベース上にファイル名になるような情報を持つのが望ましいです。
要は「対応付け」ですね。この名前にはこのファイル名 という対応付け。

下記は配列の例ですが、こういう感じの対応付けがあればifを何個も書かなくて良くなります。

※WordPress利用者ではないので未検証コードです

<?php
$icons_set = [
    'サンクス高田'=>'sankusu.png',
    'みんなでいきる'=>'minnadeikiru.png',
    '武蔵野酒造'=>'musashino.png',
];
?>

//foreachのところ中略

<?php if(array_key_exists($item->name,$icons) && file_exists(bloginfo('template_directory').'/img/group_icon/'.$icons[$item->name])): ?>
    <img src="<?=get_template_directory_uri(); ?>/img/group_icon/<?=$icons[$item->name]?>">
<?php endif; ?>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/29 09:56

    申し訳ありません。
    質問に追記にて記載いたしました。
    よろしくお願いいたします。

    キャンセル

  • 2019/08/29 10:31

    あれ、本当に改行なかったんですね。了解です・・

    キャンセル

  • 2019/08/29 10:52

    念のため自身の環境にfeed.phpを入れて確認しました。
    下記で取れます。
    $item->{'dc:creator'}

    記号などを含む(変数に使えない文字列が入っている)場合は{}で囲ってキーを指定します。

    キャンセル

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

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる