UPDATE_POST_META()在SAVE_POST中不起作用

时间:2012-12-29 作者:HoGo

我在自定义帖子中向metabox添加了一些文本输入字段。现在,每当我在管理面板的文本字段中放入一些数据并单击“保存”时,所有数据都会消失。代码如下:

<?php
function swpd_render_info_fields()
{
    ?>
    <label for="swpd_comany_addr">Company Address</label>
    <input type="text" name="swpd_company_addr" id="swpd_company_addr" />
    <?php
}
/* * Process the custom metabox fields */
add_action( \'save_post\', \'swpd_save_info_fields\',99 );
function swpd_save_info_fields($post_id) {
    global $post;
    if(isset($_POST[\'post_type\']) && ($_POST[\'post_type\'] == "swpd_directory")){
        update_post_meta( $post->ID, \'swpd_company_addr\', $_POST[\'swpd_company_addr\'] );
    }
}
?>
我已经检查了传递给update\\u post\\u meta()的数据,似乎没有问题,$post->ID包含post ID,而$u post[\'swpd\\u company\\u addr\']包含我要保存到meta的字符串。我真的做了彻底的搜索,没有任何解决方案可以解决我的问题。可能有什么问题?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您没有检索保存的数据并填充表单。

function swpd_render_info_fields()
{
    ?>
    <label for="swpd_comany_addr">Company Address</label>
    <input type="text" name="swpd_company_addr" id="swpd_company_addr" />
    <?php
}
该函数中没有任何内容可以插入保存的数据。你每次只需写一张空白表格。您需要有条件地填充input 价值

function swpd_render_info_fields($post)
{
    $meta = get_post_meta($post->ID);
    $value = (!empty($meta[\'swpd_company_addr\'])) 
        ? $meta[\'swpd_company_addr\']
        : \'\';
    ?>
    <label for="swpd_comany_addr">Company Address</label>
    <input type="text" name="swpd_company_addr" id="swpd_company_addr" value="<?php echo $value ?>" />
    <?php
}
我一直在猜测你的代码是如何工作的,但这就是我的想法。您必须使用DB中的现有值填充表单,否则每次都只是重新开始。

SO网友:fuxia

您的自定义数据在自动保存过程中被删除,因为您忘记检查。扩展保存处理程序:

if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
    return;
自动保存将触发save_post, 但不会发送自定义字段。

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在