前提・実現したいこと
Wordpressのショートコードを利用した、外部サイトの文字列抽出プラグインの作成。
###質問
Wordpress にて上記の内容のプラグインを自作しているのですが、表示されず悩んでいます。
ご教示願えればと思います。
プログラミングはかなりの初学者なので、用語など的はずれなこともあるかと思います。
発生している問題・エラーメッセージ
自作したプラグインで、URLのHTMLから任意の範囲の文字列を取得し、投稿にて表示させることはできました。
ショートコードから、「URL」「抽出したい文字列の始まり」「抽出したい文字列の終わり」
を指定して、表示させたいのですが真っ白なままで何も表示されません。
#####エラーメッセージ
エラーメッセージは無く何も表示されていない状態です。
該当のソースコード
PHP
1<?php 2/* 3Plugin Name: Extraction_Text_Test 4Description: テキストを抽出するプラグイン 5Author: ayala 6Version: 0.1 7Author URI: 8*/ 9 10function extraction_test_func($atts) { 11 12 $html = $atts[html]; 13 $start_leng = $atts[start]; 14 $end_leng = $atts[end]; 15 16 $ch = curl_init(); 17 curl_setopt($ch, CURLOPT_URL, $html); 18 curl_setopt($ch, CURLOPT_HEADER, false); 19 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 20 curl_setopt($ch, CURLOPT_TIMEOUT, 60); 21 $json = curl_exec($ch); 22 curl_close($ch); 23 $result = json_decode($json, true); 24 25 $start = mb_strpos($json,$start_leng); 26 $end = mb_strpos($json,$end_leng); 27 $extraction = mb_substr($json, $start, $end-$start); 28 29 // echo $json; 30 31 echo $extraction; 32 33} 34add_shortcode( 'extraction_test', 'extraction_test_func' );
試したこと
「投稿の編集」「ビジュアルタブ」にショートコードを
[extraction_test html='' start='' end='']
という形で記載します。
例として実際に記載した内容が以下の通りになります。
[extraction_test html='https://www.yahoo.co.jp/' start='<tr><td>・<a href' end='<tbody><tr>']
こう記載すると、何も標示されません。
echo $atts[start];
や
echo $start_leng;
をプラグインに書き加えると、<tr><td>・<a href
と表示されるので
ショートコードで指定した内容は渡っているようなのですが、何が問題なのでしょうか。
以下のように、ショートコードで「URL」「抽出したい文字列の始まり」「抽出したい文字列の終わり」を指定せず、プラグイン内で指定すると
きちんと表示されます。
[extraction_test]
以下がプラグイン内の記述です。
#####きちんと表示されるソースコード
PHP
1<?php 2/* 3Plugin Name: Extraction_Text_Test 4Description: テキストを抽出するプラグイン 5Author: ayala 6Version: 0.1 7Author URI: 8*/ 9 10function extraction_test_func($atts) { 11 12$html = 'https://www.yahoo.co.jp/'; 13$start_leng = '<tr><td>・<a href'; 14$end_leng = '<tbody><tr>'; 15 16$ch = curl_init(); 17curl_setopt($ch, CURLOPT_URL, $html); 18curl_setopt($ch, CURLOPT_HEADER, false); 19curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 20curl_setopt($ch, CURLOPT_TIMEOUT, 60); 21$json = curl_exec($ch); 22curl_close($ch); 23$result = json_decode($json, true); 24 25 26 27$start = mb_strpos($json,$start_leng); 28$end = mb_strpos($json,$end_leng); 29$chushutu = mb_substr($json, $start, $end-$start); 30 31// echo $json; 32 33echo $chushutu; 34 35} 36add_shortcode( 'extraction_test', 'extraction_test_func' ); 37
試したこと2
var_dumpで以下の物を試しました。
PHP
1var_dump($atts['start']); 2var_dump($start_leng); 3var_dump($start);
結果は
string(33) "<tr><td>・<a href"
string(33) "<tr><td>・<a href"
bool(false)
となりました。
ショートコードで指定した値は渡っているようなのですが
mb_strpos を通るところで駄目になっていると思うのですがいかがでしょう。
試しに
$start = mb_strpos($json,$start_leng);
ではなく
$start = mb_strpos($json,"<tr><td>・<a href");
と直接、検索文字を指定し
var_dump($start);
を試した所
int(7070)
表示されました。
補足情報(FW/ツールのバージョンなど)
WordPress 5.3.2 (Twenty Nineteen テーマ)
回答1件
あなたの回答
tips
プレビュー