如何使wp_insert_post_data和会话正常工作?

时间:2011-09-07 18:55:07

标签: wordpress

我正在尝试处理帖子内容,然后将其保存到数据库并通知用户是否有任何错误。我正在使用wp_insert_post_data过滤器,会话和admin_notices,因为它似乎是发布后在管理面板中将错误消息抛出到编辑屏幕的唯一简单解决方案。但是,我遇到了一个奇怪的问题 - 代码似乎运行了两次,所以当我有:

function notices(){
if(!empty($_SESSION['notices'])) print  $_SESSION['notices'];
unset ($_SESSION['notices']);}
add_action( 'admin_notices', 'notices' );

add_filter('wp_insert_post_data', 'processdata', '99', 2);
function processdata($data) {
$processed_content = filterthis($data['post_content']);
if($processed_content!='error') {
$data['post_content'] = $processed_content;
$_SESSION['notices'] .= '<div class="updated"><p>Everything is ok</p></div>';
return $data;
} else {
$_SESSION['notices'] .= '<div class="error"><p>Something went wrong</p></div>';
return $data;}

我收到两条消息。我做了一些测试,似乎首先是要保存在数据库中的内容,其次是“旧”内容(已经保存)。例如:如果先前的内容是“错误的”并且要保存的内容是“ok”,则第一条消息是“ok”,第二条消息是“error”,依此类推。但是,所有消息都是在同一时间生成的(所以这不是某种缓存问题,我想)。 对我来说更奇怪的是,如果我使用这个简单的代码:

add_filter ('wp_insert_post_data', 'filterthis', '99', 2);
function filterthis($data){
$date = date('H:i:s');
$_SESSION['my_admin_notices'] .= '<div class="updated"><p>This is a message from '.$date.'</p></div>';
$data['post_content'] .= $date;
return $data;
}

我还收到两条消息,但只有一条时间数据附加到帖子内容 - 与第一条消息传递的相同。所以看起来代码运行了两次,但只是第一次将内容保存到数据库......经过七个小时的谷歌搜索和阅读Codex后,我感到很困惑。也许解决方案是微不足道的,但我不是一个真正的PHP程序员,只是学习了一段时间,所以如果有人在这里帮助我,我会很高兴。

1 个答案:

答案 0 :(得分:0)

我在发布帖子之前进行自定义字段验证时也遇到了同样的问题。此外,当更新发布的帖子时,此过滤器会产生奇怪的行所以我决定去客户端验证。

这是非常简单的DOM操作。

如果您想使用客户端验证,请参阅以下链接。

http://greatindiaclub.oliwy.net/?p=1101