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

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

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

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

PHP

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

Q&A

1回答

684閲覧

【Wordpress】複数のリンクテキストがRSSを取得・表示することによって変わる状況で、リンクテキストにある特定の文字を含むliタグをPHPによって非表示にする方法

hanahana_332

総合スコア2

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/12/18 22:32

編集2021/12/19 05:15

Wordpressにて、「RSSImport」というプラグインを使用して外部サイトのRSSを↓

<div id="rss"> <div class="rss"> <ul> <li> <a rel="noopener" target="_blank" href="https://www.google.com/?hl=ja" title="Googleに移動する。">Googleに移動する</a> </li> <li> <a rel="noopener" target="_blank" href="https://www.google.com/?hl=ja" title="Googleを訪問する。">Googleを訪問する。</a> </li> <li> <a rel="noopener" target="_blank" href="https://www.google.com/?hl=ja" title="Googleへと移る">Googleへと移る。</a> </li> </div>

のように表示しているのですが、例えば、上記のリンクテキストにある「Google」という単語を含むliタグをあらかじめPHPで指定しておくことで、実際にサイトで表示されるときは何も表示されないようにしたいと思い、このリンクを参考にして以下のphp↓

function hihyouji($content) { $keyword = 'Google'; $pattern = '/(' . preg_quote($keyword) . ')/i'; $replace = ''; return preg_replace($pattern, $replace, $content); } add_filter('the_content', 'hihyouji');

を完成させたのですが、記事内の文章に反映されるだけで、本来反映したいはずの<div id="rss">内のリンクテキストに反映されず上手くいきません。
何が間違っているのでしょうか?

※完成イメージ
完成イメージ

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

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

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

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

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

m.ts10806

2021/12/18 23:01

「に移動する」だけ出したいということですか? PHPで置換せずとも直接htmlいじれば良いような
hanahana_332

2021/12/19 00:57

説明不足ですみません。 最初に記したHTMLは、「WP-RSSImport」という外部サイトのRSSを表示できるプラグインによってのものです。
hanahana_332

2021/12/19 01:42

不足していたため質問を修正しました。
CHERRY

2021/12/19 01:52 編集

うまく行きませんとは、どのような結果になるでしょうか。 具体的な結果を質問に追記していただけないでしょうか。
m.ts10806

2021/12/19 02:34 編集

やはり分かりません。replaceなら「非表示」ではなく、「削除」ですし。 どうなっているものが結果どうなっていたいのか、画面イメージ等つけてください。 >あらかじめPHPで指定しておくことで実際にサイトで表示されるときは非表示になるようにしたい
hanahana_332

2021/12/20 03:16 編集

重ね重ねすみません。 文章を修正し、完成イメージの画像を追記しました。
guest

回答1

0

記事内の文章に反映されるだけで、本来反映したいはずの<div id="rss">内のリンクテキストに反映されず上手くいきません。

質問への追記・修正の依頼に記載した「うまく行きませんとは、どのような結果になるでしょうか。」の回答がいただけていませんが、想像で回答します。

また、どのように RSSImport を記載しているのか記載がありませんが、ドキュメントの例のように

[RSSImport feedurl="https://wordpress.org/news/feed/" after_desc=" <a href='%href%' target='_blank'>show more</a>" displaydescriptions="true" use_simplepie="true"]

とショートコードを記載しているのでしょうか?

ショートコードを利用して、 <div id="rss"> 〜省略〜 </div> を出力していると仮定して、

記事内の文章に反映されるだけで、本来反映したいはずの<div id="rss">内のリンクテキストに反映されず上手くいきません。

の出力を置き換えれるように、ヒントだけ回答します。

ショートコードで出力している内容を the_content フィルターフックで置換する際に問題になってくるのは、the_content フィルターフックの優先順位の影響があります。

WordPress の ショートコード展開は、

add_filter( 'the_content', 'do_shortcode', 11 );

と優先度が 11 で、定義されています。

質問に記載されている

add_filter('the_content', 'hihyouji');

は、優先度を指定する第3パラメータが省略されています( add_filter参照 )が、省略せずに記載すると

add_filter('the_content', 'hihyouji', 10);

のように 優先度が 10 になります。(優先度は、数値が小さいほど早く実行し、同じ数値の場合は追加された順に実行されます。 )

つまり、質問の状態では、優先度10の「置換フィルターフック hihyouji」を実行後に 優先度11の「ショートコードが展開」されて、 <div id="rss"> 〜省略〜 </div> の部分が出力されますので、ショートコードが出力する内容を記載されたthe_contentフックでは、置き換えることはできません。

ショートコードの出力を置き換えるためには、ショートコード展開後に置換を実行する必要があります。

なるべく後ろに実行するように

add_filter('the_content', 'hihyouji', 99);

のような感じで 優先度を 99 に指定するとどうなるでしょうか。

投稿2021/12/21 09:05

CHERRY

総合スコア25218

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

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

hanahana_332

2021/12/21 21:26 編集

回答にある優先度を99に指定することをしたのですが、RSSImportで表示されている文字は非表示になりませんでした。
hanahana_332

2021/12/21 21:31 編集

どのような結果になるかですが、「ウィジェットにRSSImportのショートコードを記入して表示したリンク」ではPHPで指定した文字を消せず、「普通に入力したテキスト」と「リンクテキスト」では指定した文字を消すことができたという結果で大丈夫でしょうか? RSSImportのショートコードですが、 <div id="rss"> <div class="rss"> [RSSImport display="2" feedurl="https://○○.com/rss/index.xml"] </div> </div> のように<div~></div>で囲んだものを、ウィジェットに入力して表示しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問