DELETE_POSTMETA操作挂接上缺少帖子ID

时间:2011-06-28 作者:alonisser

我在页面中使用元数据来存储变量,并对动态生成的PayPal按钮和其他页面变量(特定于页面)进行服务器端缓存。

我试图钩住页面元数据的更新、添加和删除功能。更新和添加功能很好(都具有相同的功能),但我无法理解删除。

为了使用delete\\u post\\u数据,我需要post_id 但是do_action 没有从WordPress的源代码中返回(至少我能理解),它似乎返回了以下内容:

do_action( \'delete_postmeta\', $postmetaids ); //sometimes $post_meta_ids
在哪里

$postmetaids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = %s", $post_meta_key ) );

$post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid ));
我用来调用挂钩的代码:

add_action (\'update_postmeta\', \'wp_paypal_meta_change\',1,4);
add_action (\'add_postmeta\', \'wp_paypal_meta_change\', 1, 4);
add_action (\'delete_postmeta\',\'wp_paypal_meta_delete\', 1, 2);
删除功能:

function wp_paypal_meta_delete($post_id, $meta_keys){
/*
 handles cases where the user intentionally deletes the metadata, and deletes 
 the appropriate hidden metadata variable in order to make sure the cached 
 PayPal form matches the product data.
 */

    if ($meta_keys == \'image\'){
    delete_post_meta($post_id,\'_thumb\');
    } else if ($meta_keys == \'shipping\' || $meta_keys == \'cost\' || $meta_keys== \'bookname\'){
    delete_post_meta($post_id,\'_paypal\');
    }

}
我知道$post_id 没有进入函数,但它在那里,因为我希望WordPress以某种方式引用它-不起作用。

1 个回复
SO网友:kaiser

从OPs编辑移动到答案。

我找到了一个答案,也不是一条直路,我相信有更好的方法可以做到这一点。基本上,我使用一个小助手方法来查询SQLmeta_id 并返回post_id:

<?php
function get_key_by_id( $meta_ids )
{ 
    global $wpdb;

    $meta_ids = absint( $meta_ids );

    // Debugging:
    // $wpdb->show_errors();

    $meta_keys = $wpdb->get_var( $wpdb->prepare(
         "
            SELECT meta_key 
            FROM {$wpdb->postmeta}
            WHERE meta_id = %d
         "
        ,$meta_ids
    ) );

    // Debugging:
    // $wpdb->print_error();

    if ( $meta_keys )
        return $meta_keys; 

    // else:
    return false;
}

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $