1

我的第一个自定义插件中有以下代码,该插件为自定义帖子类型创建元框,并且所有内容都正确保存,之后所有内容都正确加载到编辑页面上,但“选择”下拉列表元素除外。

一旦页面重新加载,这些选择元框中的选项将恢复为第一个选项,尽管我知道它在被选择后保存数据作为自定义帖子类型视图上的自定义列显示正确的信息。但是,单击编辑其中一个自定义帖子类型后,所有文本输入数据都会正确加载,但选择数据不会正确加载,这会恢复为第一个选项。

这是我的代码(我只包含了一个选择元框):

add_action('save_post', 'save_details');

function admin_init(){
    add_meta_box(
        "club_manufacturer-meta", 
        "Manufacturer", 
        "club_manufacturer", 
        "club_types", 
        "normal", 
        "low"
    );
}

function club_manufacturer(){
  global $post;
  $custom = get_post_custom($post->ID);
  $club_manufacturer = $custom["club_manufacturer"][0];
  ?>
  <label>Manufacturer:</label>
  <select name="club_manufacturer" >
    <option value="Adams" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Adams</option>
    <option value="Ben Hogan" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Ben Hogan</option>
    <option value="Callaway" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Callaway</option>
    <option value="cleveland" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Cleveland</option>
    <option value="Cobra" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Cobra</option>
    <option value="Mizuno" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Mizuno</option>
    <option value="Nike" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Nike</option>
    <option value="Odyssey" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Odyssey</option>
    <option value="Ping" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Ping</option>
    <option value="Scotty Cameron"  name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Scotty Cameron</option>
    <option value="Titleist" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Titleist</option>
    <option value="Tour Edge" name="club_manufacturer" class="<?php echo $club_manufacturer; ?>">Tour Edge</option>
  </select>
  <?php
}

function save_details(){
    update_post_meta($post->ID, "club_manufacturer", $_POST["club_manufacturer"]);
}
4

1 回答 1

1

基本上,您没有使用selected.<select>

WordPress 有一个方便的功能:selected().

我会做这样的元框(你必须建立你自己的$test_array):

global $post;
$club_manufacturer = get_post_meta( $post->ID, 'club_manufacturer', true );
$test_array = array(
    'adams' => 'Adams',
    'ben'   => 'Ben Hogan'
);

echo '<label>Manufacturer:</label>';
echo '<select name="club_manufacturer" >';

foreach( $test_array as $nick => $name )
{
    // http://php.net/manual/en/function.printf.php
    printf(
        '<option value="%s" %s> %s</option>',
        $nick,
        selected( $club_manufacturer, $nick, false ),
        $name
    );
}

echo '</select>';

您的 中缺少一些重要检查save_post,例如自动保存、安全性和正确的帖子类型。查看此示例以获取完整的工作片段:自定义字段中的帖子列表此搜索查询
中的其他好示例,并检查标签。<plugin-development>

于 2013-07-13T03:45:20.040 回答