saved_post post_updated 自定义字段更新前触发,自定义字段更新后触发什么函数? WordPress的
saved_post post_updated firing before custom fields are updated, what function fires after custom fields are updated? wordpress
我有问题,我想使用另一个自定义 post 字段更新自定义用户元数据字段。它必须在整个 post 包括自定义字段保存/更新之后发生。但我发现所有调用:更新基本 post 数据,然后调用操作,然后更新自定义字段。
saved_post & post_updated 导致此代码延迟 1 保存。即,如果我要创建一个新的 post 并将 $my_value 设置为 5,我第一次保存时它会返回 0,然后下一次它会返回 5。等等.
有谁知道保存自定义 post 数据后运行的操作挂钩?或者如何使 save_post 或 post_updated 在自定义 post 数据后触发?
function zhu_li_do_the_thing( $post_id ) {
//获取post数据,提取author-ID和post-Type
$post = get_post( $post_id );
$post_type = $post->post_type;
$userid = $post->post_author;
//如果你是我自定义的post类型,那么获取我想要的自定义字段值。
if( 'my_custom_post_type' == $post_type ){
$post_custom_fields = get_post_custom($post_id);
$my_custom_field = $custom_fields['im_a_field'];
foreach($im_a_field as $key ){
$my_value = $key;
}
// 如果值以“+”或“-”开头,则对作者自定义元数据进行数学计算,如果它为空,则忽略它,如果是其他任何值,则使元数据 = 值。
if(substr($my_value, 0,1)=='+' || substr($my_value, 0,1)=='-'){
$my_int = intval($my_value);
$author_int = intval(get_user_meta($userid, 'the_objective, true));
$result = ($author_int + $str);
update_user_meta( $userid, 'the_objective', $result );
}elseif($my_value == null ){
return;
}else{
update_user_meta( $userid, 'the_objective', $my_value )
}}};
add_action( 'save_post, 'zhu_li_do_the_thing' );
您应该使用 pre_post_update
检查之前的 post 元并使用 post_updated
检查更新后的 post 元。
以下是来自 class 的一段代码,用于检查 woocomerce 产品的库存状态。
function __construct()
{
add_action( 'post_updated', array( $this, 'post_updated' ), 1, 1 );
add_action( 'pre_post_update', array( $this, 'pre_post_update' ), 1, 1 );
}
function pre_post_update( $post_ID )
{
global $post_type;
if( $post_type == 'product' )
define( 'stock_status_previous', get_post_meta( $post_ID, '_stock_status', 1 ) );
}
function post_updated( $post_ID )
{
if( defined( 'stock_status_previous' ) )
{
$stock_status = get_post_meta( $post_ID, '_stock_status', 1 );
if( $stock_status == stock_status_check )
return;
// post meta is different - sp do something
}
我有问题,我想使用另一个自定义 post 字段更新自定义用户元数据字段。它必须在整个 post 包括自定义字段保存/更新之后发生。但我发现所有调用:更新基本 post 数据,然后调用操作,然后更新自定义字段。
saved_post & post_updated 导致此代码延迟 1 保存。即,如果我要创建一个新的 post 并将 $my_value 设置为 5,我第一次保存时它会返回 0,然后下一次它会返回 5。等等.
有谁知道保存自定义 post 数据后运行的操作挂钩?或者如何使 save_post 或 post_updated 在自定义 post 数据后触发?
function zhu_li_do_the_thing( $post_id ) {
//获取post数据,提取author-ID和post-Type
$post = get_post( $post_id );
$post_type = $post->post_type;
$userid = $post->post_author;
//如果你是我自定义的post类型,那么获取我想要的自定义字段值。
if( 'my_custom_post_type' == $post_type ){
$post_custom_fields = get_post_custom($post_id);
$my_custom_field = $custom_fields['im_a_field'];
foreach($im_a_field as $key ){
$my_value = $key;
}
// 如果值以“+”或“-”开头,则对作者自定义元数据进行数学计算,如果它为空,则忽略它,如果是其他任何值,则使元数据 = 值。
if(substr($my_value, 0,1)=='+' || substr($my_value, 0,1)=='-'){
$my_int = intval($my_value);
$author_int = intval(get_user_meta($userid, 'the_objective, true));
$result = ($author_int + $str);
update_user_meta( $userid, 'the_objective', $result );
}elseif($my_value == null ){
return;
}else{
update_user_meta( $userid, 'the_objective', $my_value )
}}};
add_action( 'save_post, 'zhu_li_do_the_thing' );
您应该使用 pre_post_update
检查之前的 post 元并使用 post_updated
检查更新后的 post 元。
以下是来自 class 的一段代码,用于检查 woocomerce 产品的库存状态。
function __construct()
{
add_action( 'post_updated', array( $this, 'post_updated' ), 1, 1 );
add_action( 'pre_post_update', array( $this, 'pre_post_update' ), 1, 1 );
}
function pre_post_update( $post_ID )
{
global $post_type;
if( $post_type == 'product' )
define( 'stock_status_previous', get_post_meta( $post_ID, '_stock_status', 1 ) );
}
function post_updated( $post_ID )
{
if( defined( 'stock_status_previous' ) )
{
$stock_status = get_post_meta( $post_ID, '_stock_status', 1 );
if( $stock_status == stock_status_check )
return;
// post meta is different - sp do something
}