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

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

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

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

PHP

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

Q&A

解決済

3回答

2264閲覧

【WordPress】特定のショートコードがあったら処理を読み込みたい

lenlen

総合スコア44

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/09/05 12:25

編集2017/09/05 14:16

WordPressのsingle.phpにて、「takenoko」というショートコードがコンテンツの中にあった場合、
curlでデータ取得する処理をしたいのですが、下記のようにフックをかけても処理が全く反映されませんでした。

var_dump(変数); での検証では、if( has_shortcode( $post->post_content, 'takenoko') ) { の中では出力したのですが、returnより後ろ、または関数(shortcode_custom)の外の場合ですと出力されない様です。

別にコンテンツの内容をいじるわけではないので、add_filter('the_content') じゃなくても良いのですが、
特定のショートコードがコンテンツ内にあるかどうかを判断して、特定の処理をする&処理の中で格納された変数を外の関数でも使えるようにするにはどうすると良いでしょうか?

【追記】
①特定のショートコード([takenoko=""])があったらcurlの処理。
②[takenoko=""]は何個あっても都度ではなく、上記の処理は1回だけ行いたい。

という条件になります。

PHP

1function shortcode_custom($content){ 2 3 global $post; 4 5 if( has_shortcode( $post->post_content, 'takenoko') ) { 6 7 //やりたい処理(curlを使用したデータ取得) 8 9 } 10 11 return $content; 12 13} 14add_filter('the_content','shortcode_custom'); 15 16. 17. 18 19function shortcode($atts) { 20 21//ここで先ほどのcurlで取得したデータを使いたい。 22 23} 24

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/09/05 12:59

"あったら"というのは一度だけ実行できたら良いのか都度なのか、どうなんでしょう?
lenlen

2017/09/05 14:11

分かりにくい質問で申し訳ございません。。①特定のショートコードがあった場合に処理。②ショートコードが何個あっても1回だけの処理 という条件でございます。
guest

回答3

0

実行するタイミングが不明ですが、処理を分けなくてもショートコードがあったら記事公開更新時にcurlでデータ取得してやりたい事を実行って流れで良くないですか?
絶対に一回以上実行したくないということなら以下の例では不可能ですが、記事公開、更新をしない限り動かないので頻繁に記事を触らないなら問題ないと思います。

//function shortcode_custom($content){ function shortcode_custom(){ global $post; if( has_shortcode( $post->post_content, 'takenoko') ) { //やりたい処理(curlを使用したデータ取得) //データが取れたら実行 } //return $content; } add_filter('publish_post','shortcode_custom');

投稿2017/09/05 15:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

自己解決

回答くださった方々、申し訳ございません。
質問方法を再度練り直しますm(__)m

投稿2017/09/05 15:43

lenlen

総合スコア44

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

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

0

「外の関数でも使える」というかショートコード内から関数を呼び出して、その結果を return すればよいだけでは?

もう少し具体的なコードを提示してみてください。

投稿2017/09/05 13:25

kei344

総合スコア69407

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

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

lenlen

2017/09/05 14:18

不足情報があり申し訳ございません。 少し質問を修正致しましたm(__)m [takenoko=""]というショートコードがあれば同じショートコードが何個あっても、1度だけcurlの処理をしたいということになります。
kei344

2017/09/05 14:43

「1度だけ」は「1回の表示に1度だけ」「1記事について1度だけ」のどちらでしょうか。
lenlen

2017/09/05 14:56

1回の記事表示に1度だけという意味になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問