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

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

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

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

WordPress

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

PHP

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

Q&A

解決済

2回答

1255閲覧

PHPで記述したコードの統合について

taido

総合スコア11

RSS

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

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/06/15 23:39

PHPビギナーにつき壁にぶち当たっています。どうかご教示のほどよろしくお願いいたします。

前提・実現したいこと

Wordpressにて公開している自サイトで配信しているRSSフィードにて、MOREタグをつけた任意の場所に「…の続きを読む」という自サイトへと誘導するリンクを設置したいです。

いろいろと調べたところ、web上で公開されていた以下のコードをfunctions.phpに記述する方法で可能だということがわかりました。

function my_content_feeds($content) { global $post, $more; $more = false; $content = apply_filters('the_content', get_the_content('')); $content = str_replace(']]>', ']]&gt;', $content); $content = $content . '<div><a href="' . get_permalink($post->ID) . '">「 ' . get_the_title($post->ID) . ' 」の続きを読む</a></div>'; return $content; } add_filter('the_excerpt_rss', 'my_content_feeds'); add_filter('the_content_feed', 'my_content_feeds');

以上のことに加え、MOREタグをつけた記事のみ「…の続きを読む」を表示したいです。

発生している問題

すでに以下のコード(RSSにて特定のコード部分を非表示にする設定)がfunctions.phpにあり、関数の重複?にてエラーが表示されます。

function my_content_feeds( $content ) { $content = apply_filters( 'the_content', get_the_content() ); $content = preg_replace("/<div class=\"ad_hide\">.*?</div>/s","",$content); $content = preg_replace("/<a class=\"link_hide\">.*?</a>/s","",$content); return $content; } add_filter( 'the_excerpt_rss', 'my_content_feeds' ); add_filter( 'the_content_feed', 'my_content_feeds' );

試したこと

そこでコードを以下のように統合してみました。

function my_content_feeds( $content ) { $content = apply_filters( 'the_content', get_the_content() ); $content = preg_replace("/<div class=\"ad_hide\">.*?</div>/s","",$content); $content = preg_replace("/<a class=\"link_hide\">.*?</a>/s","",$content); global $post, $more; $more = false; /*$content = apply_filters('the_content', get_the_content(''));*/ //重複のため削除 $content = str_replace(']]>', ']]&gt;', $content); $content = $content . '<div><a href="' . get_permalink($post->ID) . '">「 ' . get_the_title($post->ID) . ' 」の続きを読む</a></div>'; return $content; } add_filter( 'the_excerpt_rss', 'my_content_feeds' ); add_filter( 'the_content_feed', 'my_content_feeds' );

しかし、結果としては…

①MOREタグの部分ではなく、記事全文が表示されたうえに末尾に「…続きを読む」が表示される。

②MOREタグをつけない記事の末尾にも「…続きを読む」が表示される。

…となりました。

安易なコードの統合が不具合を招いているのではないかと考えています。
この場合、どのように統合(あるいは分けて記述)するのが正しいのかのヒントをご教示いただきたいです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

それぞれ独立して問題なく動いているなら、多分、名前を変えるだけで問題ないと思います。
(優先順位は処理順が必要になったら試してみてください)

PHP

1function my_content_feeds_2($content) { // 名前を変える 2 global $post, $more; 3 $more = false; 4 $content = apply_filters('the_content', get_the_content('')); 5 $content = str_replace(']]>', ']]&gt;', $content); 6 $content = $content . '<div><a href="' . get_permalink($post->ID) . '">「 ' . get_the_title($post->ID) . ' 」の続きを読む</a></div>'; 7 return $content; 8} 9add_filter('the_excerpt_rss', 'my_content_feeds_2', 99); // 名前を変えて優先順位を指定する 10add_filter('the_content_feed', 'my_content_feeds_2', 99); // 名前を変えて優先順位を指定する

【関数リファレンス/add filter - WordPress Codex 日本語版】
https://wpdocs.osdn.jp/関数リファレンス/add_filter#.E3.83.91.E3.83.A9.E3.83.A1.E3.83.BC.E3.82.BF

【add_filter() | Function | WordPress Developer Resources】
https://developer.wordpress.org/reference/functions/add_filter/

投稿2019/06/16 03:56

kei344

総合スコア69364

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

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

taido

2019/06/16 06:13

ご回答ありがとうございます。参考になります。 ただし、名前を変える方法は試してみたことがあるのですが、moreタグのところで「…の続きを読む」はきちんと表示されるものの、もともと記述していた〝RSSにて特定のコード部分を非表示にする設定〟が機能しなくなります。 もしかして何か重複している部分が影響を及ぼしているのかと考え、統合した方がいいのではないかと思った次第です。 また、できれば行ないたいmoreタグを記した記事のみ「…の続きを読む」の表示も叶いません(すべての記事に「…の続きを読む」が表示される)。 この点についてお気づきのことがございましたらお教えいただきますと幸いです。
kei344

2019/06/16 08:54

> 名前を変える方法は試してみたことがある ということはこちらからの全ての提案について、試したことが有るといわれる可能性が出てしまったということですね。「エラーが表示されます。 」に対処することのみを目指した回答なので、お役に立てなかったようで残念です。
taido

2019/06/17 09:48

こちらの説明不足でお手をわずらわせてしまい申し訳ございませんでした。
guest

0

関数の名前を変えればいいだけ。

そもそも関数作る必要もないけど。

add_filter('the_excerpt_rss', function($content) { });

10年前のPHP5.3から無名関数使えるようになってるのにWP使ってる人たちは一切新しいこと覚えようとしないしひたすらコピペしかしないから古い書き方が残ってる。
WPに詳しい人ほど初心者なのでネットの情報を信じてはいけない。

投稿2019/06/16 01:12

kawax

総合スコア10377

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

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

taido

2019/06/16 06:05

ご回答ありがとうございます。 無名関数の件、大変勉強になります。こちらを優先的に勉強してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問