update_post_meta仅在保存数据时不起作用,不适用于更新

时间:2014-10-29 21:13:06

标签: php wordpress

我在类方法中使用常规wordpress函数时遇到了一些麻烦 我像这样保存post meta,它的工作正常:

public function saveMetadata( $postname ) {
    $post_id     = $_POST[ 'post_ID' ];
    $post_holder = $_POST[ $postname ];

    update_post_meta( $post_id, $postname, $post_holder );

}

但是当我尝试更新meta使用相同的方法时,它不起作用!为什么呢?

多数民众赞成我调用此

//creation and run object
add_action( 'save_post', $quality->saveMetadata( 'project_quality' ) );

3 个答案:

答案 0 :(得分:0)

尝试添加优先级

add_action( 'save_post', $quality->saveMetadata( 'project_quality' ), 999 );

另外,尝试检查数据库表wp_postmeta以验证是否存在project_quality

我对update_post_meta函数有同样的问题,但由于Yoast SEO Field优先级,我无法弄清楚

这可能会有所帮助

update_post_meta for Wordpress Yoast SEO

答案 1 :(得分:0)

所以,最后我通过在action中使用了无数函数来解决这个问题,并在其中发送变量$ post_id。 看起来,wordpress exxt exacly来自这个var,奇怪但是它有效。代码如下:

public function saveMetadata() {

    add_action('save_post', function($post_id){
        if(isset($_POST[$this->id])) {
            update_post_meta( $post_id, $this->id, $_POST[ $this->id] );
        }
    });
}

注意:未经任何验证。

并调用它,ofc:

//object creation and run
$someObject->saveMetadata();

答案 2 :(得分:0)

我有类似的问题,我尝试用WP AJAX在我的类函数中更新一个订单的post meta,但是get_post_meta()工作,更新没有,所以我用删除实际元解决了它并再次添加新数据,简短示例:

public function order_decision_ajax_callback()
{
    $current_custom_postmeta = get_post_meta($orderID, 'custompostmeta', true);
    if($current_custom_postmeta)
    {
        delete_post_meta($orderID, 'custompostmeta');
    }
    add_post_meta($orderID, 'custompostmeta', $newmeta);
}