Foreach未返回预期结果

时间:2021-01-09 作者:BretMadden

我在从以下代码返回有效响应时遇到问题。目的是返回基于post\\u title()的城市列表。

print\\r响应表示正在处理响应(见下文),但在$city上进行回音时,会发送错误。

add_shortcode(\'citylist\',function(){
global $wpdb;
$country = $wpdb->prefix . \'worldcities\';
$title = wp_title("",false,\'right\');
$args = $wpdb->get_results( "SELECT city_ascii FROM $country WHERE ranking < 2 AND country = \'$title\'");
foreach ($args as $city_ascii=>$city) {
        print_r ($city);;
};
} );
打印答复如下(注意,页码标题为“尼日利亚”;。

StdClass Object ([city_ascii] => Ibadan) StdClass Object ([city_ascii] => Ogbomoso ...
所有回答都是预期的和正确的(如Ibadan、Ogbomoso等)。

然而,当这被echo替换时,它会抛出一个错误。(见下面修订的代码)。

add_shortcode(\'citylist\',function(){
global $wpdb;
$country = $wpdb->prefix . \'worldcities\';
$title = wp_title("",false,\'right\');
$args = $wpdb->get_results( "SELECT city_ascii FROM $country WHERE ranking < 2 AND country = \'$title\'");
foreach ($args as $city_ascii=>$city) {
        echo $city;;
};
} );
任何帮助都将不胜感激。

(注意,在任何人提出这条途径之前,我已经阅读了PHP手册,在这里和其他董事会上回顾了以前的帖子)。

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

你的print_r() 声明显示您的$wpdb 调用正在返回objects, 而你不能echo 一个对象。(除非对象具有__toString() 方法,但stdClass 没有。)

您需要从对象中获取所需的属性,如下所示:$city->city_ascii.

Also, you shouldn\'t echo the content 由短代码生成。你应该改为return 字符串。

Code edited 使用$wpdb->prepare() 防止SQL注入(根据@TomJNowell的评论)。

add_shortcode(\'citylist\',function(){
    global $wpdb;
    $content = \'\';
    $country = $wpdb->prefix . \'worldcities\';
    $title = wp_title("",false,\'right\');
    $args = $wpdb->get_results( 
                $wpdb->prepare(
                   "SELECT city_ascii FROM %s WHERE ranking < 2 AND country = %s",
                   $country,
                   $title
            )
    );
    foreach ($args as $city_ascii=>$city) {
            $content .= esc_html( $city->city_ascii ) . \'<br />\';
    };
    return $content;
} );

相关推荐

在我的帐户中输出自定义页面的PHP代码

几周来我一直在努力解决这个问题。我向woocommerce我的帐户页面添加了一些自定义端点。除了一个外,其他所有的都与一个短代码相链接,工作正常。你应该链接到一个普通的wordpress页面,在我的账户页面中显示它。我不知道如何编写php,现在它所做的只是在一个空屏幕上打开该页面,而不是在我的帐户页面中。这是我想到的代码,但是{}中的部分肯定是错误的(因为它打开时https://new.holistic-horse-training.com/forum-links):add_action( \'wooco