在函数中传递参数的正确方式是什么

时间:2017-08-12 作者:Sriram Nadiminti

我正在使用以下代码并从页面中调用该函数。它没有响应。

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。

wordpress页面的调用是

[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 个回复
SO网友:birgire

OP的代码片段中存在以下问题:

缺少shortcode_atts() 用于默认属性处理

  • 错误地定义了短代码的输入参数,请改用函数create_my_shortcode( $attr = [], $content = null ){ ... }
  • 不转义用户输入,请检查例如。wpdb::prepare(). 我们希望避免可能的SQL注入使用硬编码的表前缀,wp_, 而不是$wpdb->prefix.SELECT *. 最好只取需要的东西错误设置短代码的属性,应从内容中调用,例如。[my_ttcode key1="V001" key2="Sarpanch"] 但使用更好的描述性属性,而不是key1key2.WP_DEBUG, 开发时,会有PHP通知,例如,未初始化$data 字符串,然后再附加到它检查,例如Codex 有关shortcodes.

    希望有帮助!

    结束

    相关推荐

    如何使用wpdb从表中拉取数据?

    我创建了一个新的数据库连接:$mydb=new wpdb(db info)我知道它可以连接,但由于某种原因,我无法从以下位置获取任何数据:$pulled = $mydb->get_results($mydb->prepare($query), \"ARRAY_A\"). 我知道它自己写的查询是正确的,但由于某种原因$pull不包含任何数据。任何人有任何建议或解决方案,请和谢谢你。