从MySQL填充下拉列表的正确方式是什么?

时间:2020-05-03 作者:GreatDayDan

我在解决这个问题上花了不少时间。请帮我找到正确的方法。我正在创建一个小部件,其中有一个下拉列表,其中填充了自定义表中的数据;这是表单代码:

public function form($instance) {
       global $event;
       global $events;       
       $events = new WP_Query( "SELECT id, event FROM mo_Event");
     ?>     
    <select class="dropdown" id="mydropdown" name="mydropdown" title="My Dropdown">
    <?php
    foreach ($events as $event) { ?> 
      <option value="\' . <?php $event . \'">\' . $event . \'?> </option>\';
    }?>
  </select>
  } 
该行:<option value="\' . <?php $event . \'">\' . $event . \'?> </option>\'; 正在获取“PHP通知:数组到字符串的转换”和“PHP可捕获的致命错误:类WP\\u Tax\\u查询的对象无法转换为字符串”,非常感谢您的帮助。

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

你必须使用get_results() 而不是WP_Query.

我已经对您的代码进行了更改,并在我的终端进行了测试,它对我很有效。我还使用update() 小部件的功能。您可以从下面的代码中获取参考。

  public function form( $instance ) {

    if ( isset( $instance[ \'mydropdown\' ] ) )
    $selectedvalue = $instance[ \'mydropdown\' ];
    else
    $selectedvalue = __( \'\', \'text-domain\' );

    global $event;
    global $events;       
    global $wpdb;  

     $events = $wpdb->get_results("SELECT id, event FROM mo_Event",ARRAY_A);
       ?>     
      <select class="dropdown" id="<?php echo $this->get_field_name( \'mydropdown\' ); ?>" name="<?php echo $this->get_field_name( \'mydropdown\' ); ?>" title="My Dropdown">
      <?php
      foreach ($events as $event) {
      $selected = ($event->id == $selectedvalue) ? \'selected\' : \'\';  
        echo \'<option value="\'.$event->id.\'" \'.$selected.\'>\'.$event->event.\'</option>\';
      }
      ?>
      </select>
      <?php
  }

  public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance[\'mydropdown\'] = ( ! empty( $new_instance[\'mydropdown\'] ) ) ? strip_tags( $new_instance[\'mydropdown\'] ) : \'\';
    return $instance;
  }

相关推荐

WordPress筛选器LOAD_TextDOMAIN_MOFILE在子主题的函数.php中不起作用,但在插件中起作用

插件中的函数的行为与函数中的函数不同。php内部的子主题。我有一个自定义的简单插件,里面除了下面的代码外什么都没有,它工作得很好。它按照预期正确地翻译了所有字符串的wpamelia插件。add_filter( \'load_textdomain_mofile\', \'load_custom_plugin_translation_file\', 2, 2 ); function load_custom_plugin_translation_file( $mofile, $domain ) {&#x