$wpdb->GET_RESULTS分页?

时间:2015-08-13 作者:tim daniels

我正在尝试使用带有短代码的“php in posts”插件生成Wordpress页面上有帖子的年份列表。但我使用的代码似乎打破了这一页。

这里可能有什么问题?

[insert_php]
$years = $wpdb->get_results( "SELECT YEAR(post_date) AS year FROM wp_posts WHERE post_type = \'results\' AND post_status = \'publish\' GROUP BY year DESC" );
 foreach ( $years as $year ) {
    echo \'<h2>\' . $year->year . \'</h2>\';
}
[/insert_php]

1 个回复
SO网友:birgire

对我来说,问题是使用一个使用evil()eval() 首先,要将字符串计算为PHP;-)

此部分来自PHP manual:

注意eval() 语言构造非常危险,因为它允许执行任意PHP代码。因此,不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意,在没有事先正确验证的情况下,不要将任何用户提供的数据传递给它。

很可能是global $wpdb 缺少,但我建议您只创建自己的短代码。

Example:

add_shortcode( \'tim_daniels_list\', function( $atts = [], $content = \'\' )
{
    global $wpdb;
    $years = $wpdb->get_results( 
        "SELECT YEAR(post_date) AS year 
         FROM {$wpdb->posts} 
         WHERE post_type = \'results\' AND post_status = \'publish\' 
         GROUP BY year DESC" 
    );
    $html = \'\';
    foreach ( (array) $years as $year ) {
        $html .= \'<h2>\' . $year->year . \'</h2>\';
    }
    return $html;
});

结束