サポート » 使い方全般 » プラグインを使わず、特定のページにphpファイルを挿入、実行するやり方

  • WordPressで、記事や固定ページの好きな場所で、phpファイルを実行するにはショートコードを使えばいいと聞いたのですが、実際やってみたのですがwordpressのページには作成したphpファイルの中身が表示されませんでした。
    下記のサイトを参考に実行したのですが、間違いですか?
    因みに、私が作成したphpファイルはwebapiのphpファイルです。

    http://kachibito.net/wordpress/php-file-include-post.html

15件の返信を表示中 - 1 - 15件目 (全45件中)
  • どのファイルにどういうコードを書いて、
    どういう結果になったのでしょう?
    もう少し具体的に書くと回答が得られやすいと思います 🙂

    Yahoo!apiのYOLPを使ってphpファイルを作成しました。
    Yahoo!apiの情報が入ったphpファイルをwordpressの固定ページに挿入、実行しようとしたところ、反応がありませんでした。
    やり方はfunctionsphpに上記のサイト通りに、コードを書き、wordpressの固定ページにショートコードを書きました。

    메텔

    (@digitmaetel)

    fhgfb さん

    どのファイルにどういうコードを書いて、
    どういう結果になったのでしょう?

    kurudrive さんの問いかけに答えて下さい。
    やり方はfhgfb さん以上にわかっています。
    具体的な情報と、実際の結果を示して下さい。
    どこで躓いていて先に進めないのかが、こちらで判断しがたいのですよ。

    https://ja.stackoverflow.com/questions/23874/yahooローカルサーチapiの呼び出し方
    でも、注意されたことでしょう。

    下記に記載したコードをcoeditorというアプリでphpファイルを作成しました。
    <!DOCTYPE html>
    <html lang=”ja”>
    <head>
    <meta charset=”UTF-8″>
    <title>YOLP</title>
    <head>
    <body>
    <?php
    $id = ‘ 私のyahooid’;
    $area= 13;

    $ct =’01’;
    $start = ‘1’;
    $url = ‘http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=’.$id.’&ac=’.$area.’&gc=’.$ct.’&results=100&start=’.$start.’&detail=full’;

    $xml = simplexml_load_file( $url );

    $total = $xml ->ResultInfo->Total;

    $loop = (int)($total/100);

    $i = 0;
    while($i <= $loop){
    $start = 100*$i+1;
    $url = ‘http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=’.$id.’&ac=’.$area.’&gc=’.$ct.’&results=200&start=’.$start.’&detail=full’;
    $xml = simplexml_load_file( $url );

    foreach($xml->Feature as $item){

    echo $item->Name. ‘,’ . $item->Property->Yomi .’,’ . $item->Property->Tel1 . ‘,’ . $item->Property->Address . ‘,’ . $item->Property->Station->Railway . $item->Property->Station->Name . ‘駅’ .$item->Property->Detail->OfficialPcUrl1;
    echo ‘
    ‘;
    }
    $i++;
    }

    ?>

    素朴な質問ですが、表示するページや箇所をコントロールしたい場合はショートコードの方が使い勝手は良いですが、固定ページ用のテンプレートである page.php などに

    $id = ‘ 私のyahooid’;

    以下のコードを直接貼り付ける方法だとまずいのでしょうか?

    特定のページにだけ表示したいのであれば

    page-スラッグ名.php

    のファイルに書けばそのファイルにだけ適用されます。

    その後、functions.phpに下記のコードを入れ編集しました。どこの行に入れればいいかわからなかったので、一番下の行に入れました。
    functions.phpを編集後、固定ページにショートコードを入れました。(ショートコードの文字列を何にすればいいのかわからなかったので、サイト通りだとショートコードの文字列は作成したphpファイルの名前(作成したphpファイルの名前から拡張子を取る、例として作成したファイルがhello.phpなら名前をhelloにする)で大丈夫なはずなので、そうしました。)
    ですが、サイトを表示しても固定ページにはショートコードが記載されていて、肝心の中身が表示されません。
    ちなみに私はmampを使っているので、mampのwordpress/wpcontent/themesのファイルに作成したphpファイルを入れました。(mampの使い方がいまいちわからないので、作成したphpのアップロードの仕方がわからず、ただファイルに入れただけです。)

    <?php
    function short_php($params = array()) {
      extract(shortcode_atts(array(
        'file' => 'default'
      ), $params));
      ob_start();
      include(get_theme_root() . '/' . get_template() . "/$file.php");
      return ob_get_clean();
    }
    
    add_shortcode('myphp1', 'short_php');
    ?>

    KURUDRIVEさん、ご教授ありがとうございます。
    挿入し実行したいPHPファイルがおおよそ100こ以上あるので、固定ページ用のテンプレートである page.php などに$id = ‘ 私のyahooid’;以下のコードを直接貼り付ける方法で、特定のページにだけ表示すること(page-スラッグ名.phpのファイルに書いてそのファイルにだけ適用される)はできますか?

    また、僕のphpをwordpressに挿入し実行するやり方は間違っていますか?

    메텔

    (@digitmaetel)

    挿入し実行したいPHPファイルがおおよそ100こ以上ある

    APIの制限には大丈夫ですか。一つから徐々に広げるのはだめなの?

    はい、ダメです。

    메텔

    (@digitmaetel)

    APIの制限には大丈夫ですか。

    リクエスト回数の計測方法
    上限回数は通常、1アプリケーションIDごとに1日50000回です。ただし、Web APIによってはこれよりも少なく設定されていることがあります。この回数はWeb APIごとではなく、アプリケーションIDごとに計測される総リクエスト回数を基準にします。
    たとえば、ある1つのアプリケーションIDで以下の2つのWeb APIを利用するとします。
    a http://example.yahooapis.jp/a (50000回制限)
    b http://example.yahooapis.jp/b (5000回制限)

    利用制限について http://developer.yahoo.co.jp/appendix/rate.html

    kurudriveさん、kurudriveさんに言われた通りに作れました。
    しかし、いざ固定ページを表示したところ、固定ページには文字列だけでした。
    下記のリンクの48ページから出てくるサイトみたいなのを作りたいです。

    http://wp3.jp/wp-content/uploads/2011/10/sakuraworks4-hoshino-20111005.pdf

    こちらのソースコードをみるかぎり
    https://ja.forums.wordpress.org/topic/159095?replies=14#post-229005

    echo $item->Name. ',' . $item->Property->Yomi .',' . $item->Property->Tel1 . ',' . $item->Property->Address . ',' . $item->Property->Station->Railway . $item->Property->Station->Name . '駅' .$item->Property->Detail->OfficialPcUrl1;
    echo '

    となってるので、カンマ区切りの文字だけを意図して出してるのではないのでしょうか?

    どうすればいいですか?
    代わりに何を書けばいいですか?

    fhgfbさんのコード間違っていますよ、なぜ while loop が必要なんですか?

    APIで取得できるのは、データなので、

    データをhtmlを使って見やすい形に整形するのが、テンプレートの役割です。

    以下を test.php として保存したら、固定ページの新規作成で テンプレートを

    Test Template を選択して保存すれば表示されます。

    <?php
    /**
     * Template Name: Test Template
     *
     */
    get_header();
    
    $id      = '';
    $area    = 13;
    $ct      = '01';
    $start   = '1';
    $url     = 'http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid='. $id .'&ac='. $area .'&gc='. $ct .'&results=100&start='. $start .'&detail=full';
    
    $xml     = simplexml_load_file( $url );
    echo '<table class="left">';
    echo '<style scoped>table{width:80%;margin:auto;}td{border-bottom:1px solid #ccc;}td{color:#2980b9;}</style>';
    $html    = '<tr><td>%1$s</td><td>%2$s</td><td>%3$s</td><td>%4$s</td><td>%5$s</td><td>%6$s</td><td>%7$s</td></tr>';
    
    foreach ( $xml->Feature as $item ) {
    
        printf( $html, $item->Name, $item->Property->Yomi, $item->Property->Tel1, $item->Property->Address, $item->Property->Station->Railway, $item->Property->Station->Name . '駅', $item->Property->Detail->OfficialPcUrl1 );
    }
    echo '</table>';
    
    get_footer();

    あくまでサンプルです。styleは、便宜的につけているので、style.cssに移動するなり、自分自身で書き直してくださいね。

    APIデータの、検証などが別途必要になりますので、注意してください。

    コードを書くときは、逆クォート で囲ってください。コードを読んでもらえる確率が激減しますよ 🙂

15件の返信を表示中 - 1 - 15件目 (全45件中)
  • トピック「プラグインを使わず、特定のページにphpファイルを挿入、実行するやり方」には新たに返信することはできません。