web-dev-qa-db-ja.com

関数にパラメータを渡すための正しい方法は何ですか

次のコードを使用して、ページから関数を呼び出しています。応答していません。

add_shortcode('my_ttcode', 'create_my_shortcode');
function create_my_shortcode($key1, $key2){
global $wpdb;
$result = $wpdb -> get_results ( "
    SELECT * 
    FROM wp_villageleaderdb 
    WHERE VillageID = $key1 AND VillageLeaderPosition = $key2 LIMIT 0, 100
    ", 'ARRAY_N' );
var_dump($result);  
//return $result[0][1] . "<br />";  $data = '';
$i = 0;
foreach( $result as $single_result ){
$data .= $result[$i][1] . "<br />";
$i++;
}

値が与えられれば$ key1と$ key2の代わりに、それは問題なく動作しています。

ワードプレスのページからの呼び出しは

[my_ttcode (V001, Sarpanch)]

正しい方法は何ですか?

試しましたが、パラメータが渡されません。これがコードです。

 add_shortcode('vill_problems', 'get_villageproblems');
 function get_villageproblems($atts){ 
 extract(shortcode_atts( array( 'villid' => "V000", ), $atts ));
 global $wpdb;
 $result = $wpdb -> get_results ( "
 SELECT *
 FROM wp_villageleaderdb
 WHERE VillageID = $villid LIMIT 0, 100
 ", 'ARRAY_N' );

 $i = 0;
 foreach( $result as $single_result ){
 $data .= $result[$i][1] . "<br />"; $i++;
 }
 return $data . "<br />";
 } 
1

以下は、OPのコードスニペットでは問題があります。

  • デフォルトの属性処理に shortcode_atts() がありません。
  • ショートコードの入力引数を誤って定義しています。代わりにfunction create_my_shortcode( $attr = [], $content = null ){ ... }を使用してください。
  • ユーザー入力をエスケープしていない、チェックしてください。 wpdb::prepare() 。起こりうるSQLインジェクションを避けたい。
  • wp_の代わりに、ハードコードされたテーブルプレフィックス$wpdb->prefixを使用します。
  • すべてのフィールドをSELECT *で取得します。必要なものだけを取り出した方がよいでしょう。
  • ショートコードのコールバックからの出力を返さない.
  • ショートコードの属性を誤って設定している場合は、コンテンツから次のように呼び出してください。 [my_ttcode key1="V001" key2="Sarpanch"]しかし、key1およびkey2の代わりに、より記述的な属性を使用してください。
  • 例えばからのPHP通知があるので、開発時にWP_DEBUGを使用しないかもしれません。追加する前に$data文字列を初期化しません。
  • コードを適切にインデントしないと、コードプロジェクトを保守し理解するのが難しくなります。

確認してください。 ショートコード に関するより一般的な情報については、 Codex を参照してください。

それが役に立てば幸い!

1
birgire