【问题标题】:Custom MetaBox Data is Saving, but Not Loading on Edit Screen自定义 MetaBox 数据正在保存,但未在编辑屏幕上加载
【发布时间】:2013-07-12 23:47:46
【问题描述】:

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

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

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

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"]);
}

【问题讨论】:

    标签: wordpress post loading save


    【解决方案1】:

    基本上,您没有使用attribute selected for &lt;select&gt;

    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 中遗漏了一些重要检查,例如自动保存、安全性和正确的帖子类型。检查此示例以获得完整的工作 sn-p:List of Posts in a Custom Field
    search query 中的其他好示例,并检查&lt;plugin-development&gt; 标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多