修复wpdb->GET_RESULTS和wpdb->准备?

时间:2015-03-08 作者:yaserso

所以我一直在使用这个主题Vilan 从他们前面。除了这个主题,还有几个插件,其中一个是Revolution Slider. 我也在使用Bedrock 通过Roots. 我收到以下错误:

注意:wpdb::prepare的调用不正确。wpdb::prepare()的查询参数必须有占位符。有关详细信息,请参阅WordPress中的调试。(此消息是在版本3.9中添加的。)在/Applications/MAMP/htdocs/localppl/web/wp/wp-includes/functions中。php第3547行。

除了WordPress Gallery在任何时候以网格模式显示时都会在加载时卡住之外,我不会感到困扰。我发现错误来自旋转滑块,因为我将其关闭和打开,每当我这样做时,问题就会出现和消失。我试图追溯问题,发现一旦删除下面的代码,它就会正常工作。现在,我确定问题出在数据库调用上,但我不知道如何修复它(我将使用子主题替换过滤器)。

一旦删除prepare调用,它就可以正常工作,但我读到它是用来防止SQL注入的。即使如此,如果可能的话,我仍然想学习如何在使用它的同时解决这个问题。

 if (is_plugin_active(\'revslider/revslider.php\')) {
 global $wpdb;

  $rs_table_name = $wpdb->prefix . "revslider_sliders";
  $rs = $wpdb->get_results( $wpdb->prepare("SELECT id, title, alias FROM $rs_table_name ORDER BY id ASC LIMIT 999", \'\') );

 $revsliders = array();
 if ($rs) {
     foreach ( $rs as $slider ) {
       $revsliders[$slider->alias] = $slider->alias;
     }
 } else {
     $revsliders["No sliders found"] = 0;
 }

 // Page header slideshow metabox
 $meta_boxes[] = array(
         // Meta box id, UNIQUE per meta box. Optional since 4.1.5
         \'id\' => \'general_page_header_slideshow_meta\',

         // Meta box title - Will appear at the drag and drop handle bar. Required.
         \'title\' => __( \'Page Header Slideshow\', \'okthemes\' ),

         // Post types, accept custom post types as well - DEFAULT is array(\'post\'). Optional.
         \'pages\' => array( \'page\' ),

         // Where the meta box appear: normal (default), advanced, side. Optional.
         \'context\' => \'normal\',

         // Order of meta box: high (default), low. Optional.
         \'priority\' => \'high\',

         // Auto save: true, false (default). Optional.
         \'autosave\' => true,

         // List of meta fields
         \'fields\' => array(
                 array(
                     \'name\'  => \'Page header slider\',
                     \'id\'    => "{$prefix}page_header_slider",
                     \'desc\'  => \'Enable/Disable page header slider.\',
                     \'std\'   => 0,
                     \'type\'  => \'checkbox\',
                 ),

                 // SELECT BOX
                 array(
                     \'name\'     => __( \'Select the page header slider\', \'okthemes\' ),
                     \'id\'       => "{$prefix}page_header_slider_select",
                     \'type\'     => \'select\',
                     // Array of \'value\' => \'Label\' pairs for select box
                     \'options\'  => $revsliders,
                     // Select multiple values, optional. Default is false.
                     \'multiple\'    => false,
                     \'std\'         => \'\',
                     \'placeholder\' => __( \'Select a slider\', \'okthemes\' ),
                 ),

         ),

 );
 } //end check for rev slider

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

根据建议Milo, 我删除了prepare语句,它运行得很好:

$rs = $wpdb->get_results( "SELECT id, title, alias FROM $rs_table_name ORDER BY id ASC LIMIT 999" );
然后我来尝试通过一个子主题覆盖它。它最初添加到父主题中的筛选器中:

add_filter( \'rwmb_meta_boxes\', \'gg_register_meta_boxes\' );
我苦苦思索如何更换过滤器;简单地删除和添加另一个函数并不能解决这个问题,但我必须将remove\\u过滤器添加到动作挂钩中,以覆盖父主题函数:after_setup_theme.

我通过以下代码解决了这个问题:

// Change Parent Theme Features
add_action( \'after_setup_theme\', \'change_parent_theme_features\', 10 );

function change_parent_theme_features() {
    remove_filter( \'rwmb_meta_boxes\', \'gg_register_meta_boxes\' );
}
最后,我将修改后的函数添加到上述过滤器中。

结束

相关推荐

Wpdb查询、wp_INSERT_POST、wp_INSERT_USER等出现问题。查询运行两次

是否有人遇到此问题?我创建了一个自定义php脚本,它通过使用wp_insert_post() 但每次我运行代码时,它都会创建一个2个新帖子,其中应该只有一个帖子,就像它运行了两次一样,所以我使用wpdb->query 也是一样,真的很奇怪。请帮助我,我不知道是什么原因以及如何解决此问题。非常感谢你。这是一个示例代码,我只是为了测试这个问题,它仍然创建了两个相同的帖子 function testtest(){ $ads_data = array(