下面是我的代码,它将获取post\\u id并从同一类别中随机获取3篇帖子,并将它们存储为自定义字段。代码显然是有效的,因为当我单击“New Post”时,我看到自定义字段正在填充,但当我单击“Publish”或“Save”时,下面的代码没有得到执行,据我所知,在创建新帖子时将调用一次Save\\u Post,在实际保存帖子时将调用一次Save\\u Post。
有趣的是,下面的代码可以在本地服务器WAMP上运行,但不能在我的生产服务器上运行,我不知道为什么。它们都使用相同的插件。
function update_postmeta($post_id) {
global $post;
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
return;
}
unset($rand_id);
$cat_id = get_the_category($post_id);
$args = array(
\'showposts\' => 3,
\'orderby\' => \'rand\',
\'cat\' => $cat_id[0]->cat_ID,
);
$my_query = new WP_Query($args);
while ($my_query->have_posts()) : $my_query->the_post();
$rand_id = $rand_id.get_the_ID().\',\';
endwhile; update_post_meta($post_id, \'related_id\',$rand_id);
}
add_action(\'save_post\', \'update_postmeta\');
最合适的回答,由SO网友:cybmeta 整理而成
您的代码中有一些错误。例如,您unset
未定义的变量。下面的一些行您试图再次使用未定义的变量。。。。也许这就是问题的根源。
你能试试这个吗?(编辑,我认为更好get_posts
比new WP_Query
在这种情况下)
function wpse_update_postmeta($post_id) {
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
return;
}
$cat_id = get_the_category($post_id);
$related_posts = array();
if( !empty($cat_id) ) {
$args = array(
\'posts_per_page\' => 3,
\'orderby\' => \'rand\',
\'category\' => $cat_id[0]->cat_ID,
);
$related_posts = get_posts($args);
}
if( count($related_posts) > 0 ) {
$rand_id = array();
foreach( $related_posts as $related_post ) {
$rand_id[] = $related_post->ID;
}
update_post_meta($post_id, \'related_id\', implode(",", $rand_id));
//Uncomment the next line to check if you get here
//error_log("Hello! I\'m here");
}
}
add_action(\'save_post\', \'wpse_update_postmeta\');