Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 如何使wp_insert_post_数据和会话正常工作?_Wordpress - Fatal编程技术网

Wordpress 如何使wp_insert_post_数据和会话正常工作?

Wordpress 如何使wp_insert_post_数据和会话正常工作?,wordpress,Wordpress,我试图在将帖子内容保存到数据库之前对其进行处理,并在出现任何错误时通知用户。我正在使用wp_insert_post_数据过滤器、会话和管理通知,因为发布后将错误消息抛出管理面板中的编辑屏幕似乎是唯一简单的解决方案。然而,我遇到了一个奇怪的问题-代码似乎运行了两次,因此当我: function notices(){ if(!empty($_SESSION['notices'])) print $_SESSION['notices']; unset ($_SESSION['notices']);}

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

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;}
函数通知(){
如果(!empty($_SESSION['notices'])打印$_SESSION['notices'];
取消设置($_会话['notices']);}
添加操作(“管理通知”、“通知”);
添加过滤器(“wp\U插入\U发布数据”、“processdata”、“99”、2);
函数processdata($data){
$processed_content=filterthis($data['post_content']);
如果($processed_content!=“error”){
$data['post_content']=$processed_content;
$_会话['notices']。='p>一切正常

'; 返回$data; }否则{ $_会话['notices']。='p>出现了一些问题

'; 返回$data;}
我收到两条消息。我做了一些测试,第一条是针对要保存在数据库中的内容,第二条是针对“旧”内容(已保存)。例如:如果以前的内容是“错误”,而要保存的内容是“确定”,第一条消息是“确定”,第二条消息是“错误”然而,所有消息都是在同一时间生成的(所以我想这不是某种缓存问题)。 更奇怪的是,如果我使用以下简单代码:

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;
}
add_filter('wp_insert_post_data','filterthis','99',2);
函数筛选器此($data){
$date=日期('H:i:s');
$会话['my_admin_notices']。='这是来自'$date'的消息。

'; $data['post_content'].=$date; 返回$data; }

我也收到了两条消息,但只有一条时间数据附加到帖子内容中——与第一条消息传递的时间数据相同。因此,代码似乎运行了两次,但只是第一次将内容保存到数据库中……在谷歌搜索和阅读了七个小时的Codex后,我完全困惑了。也许解决方案很简单,但我不是一个真正的PHP程序员,只是学习了一段时间,所以如果这里有人能帮助我,我将非常高兴。

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

这是一个非常简单的DOM操作

如果要使用客户端验证,请参考以下链接


如果您只想验证post数据,并在必要时显示错误消息,则不需要使用会话。请参阅我对前面问题的回答:谢谢,我之前阅读了您的帖子,当时我正在寻找向用户提供自定义错误消息的方法。但是,在我看来,使用会话似乎更简单。现在我我想我错了;)我肯定会在我的脚本中实现你的解决方案。不过,这个会话问题仍然让我发疯…@richard-m我已经测试了你的解决方案,猜猜怎么着-我也有同样的问题…如果我发布的内容有错误,“error”消息出现,但如果我再次保存它,这一次ok,错误消息将保留。我必须再次按“Update”以清除它。My functions.php代码为:。我正在尝试将节添加到文章内容中,function sectionize返回数组,其中[0]错误和[1]节标记剥离内容错误,字符串sectionized内容正确(正确的标题标签顺序等)。你知道可能有什么问题吗?@richard-m还有一个通知-我在消息正文中输入了日期('gis'),但它不同,因此似乎在第二次(“确定”)保存期间生成了第二条错误消息,尽管它不应该(错误条件不满足,内容格式正确)。我在这里安装了普通的Wordpress 3.2.1,没有打开任何插件。啊,看起来这与Wordpress修订系统有关(我已禁用了该系统)。您可能只需在条件中添加一个子句来检查是否保存了修订:
if($data['post\u type')!='revision'&&is\u array($processed\u content)){