保存后多个选项未保持选中状态

时间:2014-05-17 作者:Dsmart

Problems:

save可以工作,但仅在保存后将其中一个选项存储在数据库中。

保存后选项未显示为选中状态。

选择字段:

<select id="exclude_page_from_cookies" name="exclude_page_from_cookies[]" multiple="multiple">
        <?php

        $pages = get_pages();
        foreach ( $pages as $page ) {
            $title = get_the_title($page);
            $id    = $page->id;
            ?>

            <option id="<?php echo $id; ?>" value="<?php echo $title ?>" <?php selected( $title ); ?> >
                <?php echo $title;?>
            </option>
        <?php
        }
        ?>
    </select>
保存功能:

if ( isset( $_POST[\'exclude_page_from_cookies\'] ) ) {
    foreach( $_POST[\'exclude_page_from_cookies\'] as $exclude_page ) {
         echo $exclude_page;
         update_option( \'exclude_page_from_cookies\', $exclude_page ) ;
    }
}
我知道我已经在常规堆栈交换中发布了这个,但由于这是一个可湿性粉剂的东西,我想我应该把它移到这里:)

1 个回复
SO网友:Pontus Abrahamsson

首先,您需要将值保存为数组,因为您希望选择多个项目。这个update_option 函数将为您序列化一个数组,所以您只需要给它一个项目数组。在代码中,由于使用了相同的键,所以保存了所有项exclude_page_from_cookies 而不是作为数组。您还需要将所选项目标记为选中,以便能够保存更多项目。功能selected 需要selectedcurrent 匹配并回显所选标记。您可以将该值保存为标题,但我建议您将其保存为页面的ID,因为如果您有ID,则可以使用函数轻松获取标题get_the_title(). 因此,我更新了save函数以接受数组:

$exclude_pages = $_POST[\'exclude_page_from_cookies\'];

if( isset( $exclude_pages ) ) 
{
   update_option( \'exclude_page_from_cookies\', $exclude_pages );
}
else
{
   delete_option( \'exclude_page_from_cookies\' );
}
和选定的框标记:

<select id="exclude_page_from_cookies" name="exclude_page_from_cookies[]" multiple="multiple">
       <?php
          $pages = get_pages();
          $exclude = get_option(\'exclude_page_from_cookies\');

          foreach ( $pages as $page ) 
          {
          ?>
             <option value="<?php echo $page->ID; ?>" <?php echo ( in_array( $page->ID, $exclude ) ? \'selected\' : \'\' ); ?> >
                <?php echo $page->post_title; ?>
             </option>
          <?php
          }
       ?>
    </select>

结束

相关推荐

相当于公共页面的admin.php

我对Wordpress API很陌生,似乎找不到我需要的东西。我一直在寻找一种创建公共页面的方法(用户无需管理员许可即可访问),类似于在管理员上创建页面时使用的方法。php。基本上,我有一个在仪表板中创建调查的应用程序,但现在我想向用户显示实际情况。我计划使用shortcode, 这将打开一个窗口,其中包含使用javascript的window.open(). 但是,如果调用插件目录中的空页面,我将无法再连接到数据库。在管理中。php我也可以$.post 到ajaxurl, 但这只能在管理标头中访问。我可