サポート » 使い方全般 » wordpressの投稿欄でphpを使う方法について

  • 初心者です。
    データベースのデータをphpで取得してwordpressのサイトで表示する、
    あるいはサイトからデータベースにデータを追加する、ということをしたいです。そのために投稿欄でphpを使うためにはrunPHPやexcuPHPなどのプラグインを使えばよいようなのですが、上記のプラグインはセキュリティ的に使用するのはあまり好ましくないということを目にします。これらのプラグインを使用した場合具体的にどのようなリスクが考えられるでしょうか?
    あとプラグインを使わずにphpを使う方法としてショートコードがあるのを知りました。それで試してみて、データベース内のデータをブログで表示するだけならショートコードでできました。これはこれでいいんですけど、例えばデータベース内の値とユーザが入力した値を比べて同じなら〇〇、違うなら××の処理、というようなケースだと変数にデータベースから取得した値を代入して比較→条件分岐、という流れかと思います。この時に、functions.phpにデータベースの値を取得して返す関数を定義しショートコードを使用して、データベースから取得した値を変数に代入することってできるでしょうか?できる場合どのような方法でしょうか?
    var num=[test];←とりあえずこのような感じで試してはみたのですがダメでした。
    ただ文字列を表示させるだけの関数の場合、functions.phpに
    function test{
    return ‘表示したい文字列’;
    }
    と関数定義し、投稿欄に[test]と記述すれば文字列は表示された(ショートコードが使えた)ので、ショートコードを使っても関数の戻り値として値なり文字列なりを返してはいると思うのですが。。。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • こんにちは、bebetromaさん。

    WordPress はフレームワークないし CMS ですので、管理画面で PHP が利用できる必要はない、と個人的には思います。管理画面で PHP が使える事によるリスクは以下になります。

    • シンタックスエラーがあった場合、管理画面、最悪の場合 WordPress が使えなくなる。(ヒューマンエラーは絶対に起こると考えた方が懸命と判断)
    • 仮に管理画面がハックされた場合、管理画面で好き放題に PHP を実行される。
    • プラグイン自体にバグがあった場合、どうしましょうか・・・。

    簡単に考えられるリスクは上記の通りですが、結局の所は管理者の判断になります。

    では、本題です。

    ショートコードは、関数内で return する迄は PHP であり、好き勝手にコードを書く事ができます。その為、データベースにアクセスして値を検証するなど、難しく考えずに普通に行えばよいです。

    // ポストメタ foo の値と一致するか検証するだけの例
    // [bartag foo="foo-value"]
    function bartag_func( $atts ) {
    	extract( shortcode_atts( array(
    		'foo' => 'no foo',
    		'bar' => 'default bar',
    	), $atts ) );
    
    	$meta = get_post_meta( $post->ID, 'foo', true );
    
    	if ( $meta === $foo ) {
    		$result = "Good";
    	} else {
    		$result = "Bad";
    	}
    
    	return $result;
    }
    add_shortcode('bartag', 'bartag_func');

    例えば、こんな感じです。検証は if で簡単に行っているだけですので、実際は正規表現など必要とは思います。(動作未検証です)
    データへのアクセスは、独自に追加したテーブルでなければ、WordPress の関数を使えば楽でしょう。仮に独自に追加したテーブルにアクセスしたいのであれば、グローバル変数の $wpdb を使えばよいかと思います。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「wordpressの投稿欄でphpを使う方法について」には新たに返信することはできません。