使用自定义元框编辑帖子时,值不能正确显示

时间:2013-01-12 作者:Anagio

我跟着this tutorial 使用简单的两个选项下拉列表创建自定义元框。

我的代码如下。自定义字段在创建帖子时保存,在更改值和更新时编辑。但当我转到编辑帖子页面时,这些值不是动态的,并且根据设置的元值显示正确的下拉值。因此,如果我创建了一篇文章并将选项设置为“是”,那么我会去编辑以发布它,它会显示“否”,但在自定义元字段中它会显示“是”,以便正确保存。我知道NoYes 值应该是动态的,并检查是否设置了任何自定义元来显示它,但不确定代码是什么。非常感谢您对代码的任何帮助。谢谢

<?  

add_action(\'admin_menu\', \'my_post_options_box\');

function my_post_options_box() {
    add_meta_box(\'post_info\', \'Trade\', \'custom_post_info\', \'post\', \'side\', \'high\');
}

//Adds the actual option box
function custom_post_info() {
    global $post;
?>
    <fieldset id="mycustom-div">
        <div>
        <p>
            <label for="cpi_dropdown_options" >Accept Trade?</label><br />
            <select name="cpi_dropdown_options" id="cpi_dropdown_options">
                <option <?php selected( get_post_meta($post->ID, \'cpi_dropdown_options\', true), \'Option 1\' ); ?>>No</option>
                <option <?php selected( get_post_meta($post->ID, \'cpi_dropdown_options\', true), \'Option 2\' ); ?>>Yes</option>
            </select>
            <br />
        </p>
        </div>
    </fieldset>
<?php
}

add_action(\'save_post\', \'custom_add_save\');

function custom_add_save($postID){

    // called after a post or page is saved
    if($parent_id = wp_is_post_revision($postID)) {
        $postID = $parent_id;
    }

    if ($_POST[\'cpi_dropdown_options\']) {
        update_custom_meta($postID, $_POST[\'cpi_dropdown_options\'], \'cpi_dropdown_options\');
    }

    if ($_POST[\'cpi_text_option\']) {
        update_custom_meta($postID, $_POST[\'cpi_text_option\'], \'cpi_text_option\');
    }
}

function update_custom_meta($postID, $newvalue, $field_name) {
    // To create new meta
    if(!get_post_meta($postID, $field_name)){
        add_post_meta($postID, $field_name, $newvalue);
    } else {
        // or to update existing meta
        update_post_meta($postID, $field_name, $newvalue);
    }
}
?>

2 个回复
SO网友:s_ha_dum

我不能百分之百确定,因为如果不安装并运行您的代码,我就无法进行测试,但我认为问题是您没有响应您的selected 加成

<option <?php selected( 
    get_post_meta($post->ID, \'cpi_dropdown_options\', true), 
    \'Option 1\', 
    true
); ?>>No</option>
最后一个参数告诉我们selected 回显输出。

编辑:

您的选项没有发送值。将您的代码与this code from the Codex:

<option value="1" <?php selected( $options[\'foo\'], 1 ); ?>>1</option>
您的代码缺少value= 部分您声称:

。。。如果我创建了一篇文章并将选项设置为“是”,那么我会去编辑以发布它,它会显示“否”,但在自定义元字段中它会显示“是”,以便正确保存。我知道No和Yes值应该是动态的,并检查是否有任何自定义元被设置为显示它,但不确定代码是什么。

这听起来好像您已经验证了内容实际上正在按您的需要保存到数据库中,但没有这样做value 我不明白他们会是什么样子。也就是说,没有value 表单的一部分是发送选项内容--“否”和“是”。您可以通过以下小片段验证:

<form>
  <select name="hi" method="get">
    <option>No</option>
    <option>Yes</option>
  </select>
  <input type="submit" value="go" />
</form>
然而,您正在寻找true “选项1”和“选项2”的值。您可以添加value 属性匹配什么selected 正在查找,这可能是最好的,因为您可以在不更改表单功能的情况下更改表单的外观,或者您可以检查“否”和“是”,而不是“选项1”和“选项2”。

SO网友:Rick Curran

您确定“pi\\u dropdown\\u options”post\\u meta的输出实际上是“Option 1”或“Option 2”的形式吗?如果在“pi\\u dropdown\\u options”的输出中看不到这些值中的任何一个,那么您只会看到所选下拉列表中的第一项。您是否尝试过只回显“pi\\u dropdown\\u options”自定义字段以查看其内容?它也将区分大小写匹配。

另一件需要注意的事情(正如s\\u ha\\u dum在之前的回答中指出的)是列表中“option”元素的标记没有设置值:

<option<?php selected( get_post_meta($post->ID, \'cpi_dropdown_options\', true), \'Option 1\' ); ?>>No</option>
如果我读得正确,那么如果这是选定的选项,那么标记将是:

<option selected="selected">No</option>
因此,如果您随后保存帖子,“pi\\u dropdown\\u options”post\\u meta可能为空,每个选项上都应该有一个“value”属性,如:

<option value="Option 1" selected>No</option>
因此PHP代码类似于:

<option value="Option 1" <?php selected( get_post_meta($post->ID, \'cpi_dropdown_options\', true), \'Option 1\' ); ?>>No</option>
不知道这些是否有用!或者,您可以尝试另一种语法来检查option selected state,而无需使用“selected”WordPress函数:

<option value="Option 1" <?php if ( get_post_meta($post->ID, \'cpi_dropdown_options\', true) == \'Option 1\' ) echo \'selected="selected"\'; ?>>No</option>

结束

相关推荐

带有App Store/Google Play链接的定制Metabox

我在尝试设置我们的应用程序组合时遇到了一个问题。(看一看our portfolio page)发生了什么:我用“apps”创建了一个自定义帖子类型。我要写的每一篇文章都是我们的一个项目。在这篇文章中,可能有3个属性:1) 应用商店链接2)Google Play store链接----可选:----3)实习生应用(无链接)同时,在我们的模板中将显示:是否有商店链接?如果是,请制作此图像(http://www.dreamix-studio.com/images/ios_button.png)链接:其他:创建此