在wp_INSERT_POST()之前/期间添加自定义字段(POST META)

时间:2014-01-06 作者:tobek

我们的代码库有大量的逻辑,可以在插入/创建post时执行。然而,其中一些逻辑依赖于自定义的post-meta。据我所知,向新帖子添加帖子元的唯一方法如下:

$post_id = wp_insert_post($post_obj);
add_post_meta($post_id, \'key\', "value");
然而,这意味着在插入post上的挂钩时,post元不存在。

是否有任何方法可以将post meta作为$post_obj?

我尝试用$post_obj->custom_key = \'value\' 但它似乎并没有真正进入数据库。我唯一能想到的就是劫持我没有使用的post对象的现有属性,比如menu_order, 并在那里存储一些信息。那是一个丑陋的黑客。

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

您可以将函数挂接到wp_insert_post 行动挂钩:

add_action( \'wp_insert_post\', \'wpse128767_add_meta\' );
function wpse128767_add_meta( $post_id ) {
    add_post_meta( $post_id, \'key\', \'value\' );
}
要确保在运行任何其他插入挂钩之前已添加元数据,请为其设置更高的优先级:

add_action( \'wp_insert_post\', \'wpse128767_add_meta\', 1 );
默认情况下add_action() 使用优先级10; 数字越小,运行越早。

SO网友:samjco

Here is a solution.

//Your args to Gather post data.
$args = array(
    \'post_title\'    => \'My post\',
    \'post_content\'  => \'This is my post.\',
    \'post_status\'   => \'publish\',
    \'post_author\'   => 1,
);


//Retrieve Id back after new post is made.
$post_id = wp_insert_post( $args, true );

//Check for errors, before updating meta fields
 if (is_wp_error($post_id)):
        $errors = $post_id->get_error_messages();
        foreach ($errors as $error):
            //log errors
            echo $error;
        endforeach;
 else:

   //If updating WP meta
   update_post_meta( $post_id, meta_key1, \'add this\');
   update_post_meta( $post_id, meta_key2, \'add something\');

   //if updating ACF meta
   //update_field( \'meta_key1\', \'add this\', $post_id );
   //update_field( \'meta_key2\', \'add something\', $post_id );
 
 endif;
结束

相关推荐

Wordpress Hacks/Defacing

我想弄清楚Wordpress网站是如何被破坏/黑客入侵的。我非常了解发展。我知道如何保护代码等。但我最近发现,大量Wordpress网站正在遭到破坏。我开发的两个网站和其他网站。它只是过时的Wordpress安装吗?即使Wordpress运行的是3.1版,网站仍然被破坏。所有用户输入均在前端和后端进行验证。尽可能使用WP NONCE。服务器相当安全(不是777)。????我对Wordpress失去了信心。如果是我的错,我很乐意承认并修复,但唯一的答案似乎是过时的Wordpress网站,我觉得这很难相信。