首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示错误消息-钩子admin_notices在wp_insert_post_data或publish_post上失败

显示错误消息-钩子admin_notices在wp_insert_post_data或publish_post上失败
EN

Stack Overflow用户
提问于 2009-08-07 00:49:21
回答 3查看 5.9K关注 0票数 6

我正在添加验证,因此如果post属于特定类别,则需要设置某些自定义字段。

连接wp_insert_post_dataadmin_notices应该很容易,但是有一个重定向会导致admin_notices回调消失。

好的-所以我创建了一个利用会话存储重定向错误消息的黑客:

代码语言:javascript
复制
function set_post_pending($data, $postarr) {
    // If it's not valid...
        $error = "You are missing some Custom Fields.";
        $_SESSION['admin_notices'] = $error;
        $data['post_status'] = 'pending';
    return $data;
}
add_filter('wp_insert_post_data', 'set_post_pending',1,2);

function session_admin_notice() {
    if($out = $_SESSION['admin_notices']) {
        $_SESSION["admin_notices"] = "";
        echo $out;
    }
    return false;
}
add_action('admin_notices', "session_admin_notice");

此解决方案的问题是,在调用some_how时会话不可用,session_admin_notice有一个简单的(但_crazy)解决方案:

代码语言:javascript
复制
public static function fix_session_bs() {
    // TODO: Why do I have to do this?
    if(!session_id() && $_COOKIE["PHPSESSID"]) {
        session_start($_COOKIE["PHPSESSID"]);
    }
}
add_action('admin_init', 'fix_session_bs');

问题是:为什么我要经历这么多疯狂才能发出错误信息呢?

我做错什么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-07 01:29:18

Wordpress不使用会话,如果register_globals在,它将清除$_SESSION数组。

Wordpress使用URL中的message整数传递它的消息,然后在wp-admin文件夹的相关edit-[type]-form.php文件中定义一个消息数组。我认为您可能可以将自己的变量附加到重定向中,然后在admin_notices钩子函数中得到它。看看edit-[type]-form.php文件,了解一下它是如何工作的。

票数 3
EN

Stack Overflow用户

发布于 2013-11-06 20:23:08

您可以像WordPress那样做:像这样使用瞬变

代码语言:javascript
复制
function set_post_pending($data, $postarr) {
    // If it's not valid...
        $error = "You are missing some Custom Fields.";
        set_transient( get_current_user_id().'missingfield', $error );
        $data['post_status'] = 'pending';
    return $data;
}
add_filter('wp_insert_post_data', 'set_post_pending',1,2);

function show_admin_notice() {
    if($out = get_transient( get_current_user_id().'missingfield' ) ) {
        delete_transient( get_current_user_id().'missingfield' );
        echo "<div class=\"error\"><p>$out</p></div>";
    }
    // return false; // nothing to return here
}
add_action('admin_notices', "session_admin_notice");

ps :避免在WordPress,thx中使用WordPress

票数 10
EN

Stack Overflow用户

发布于 2011-07-07 11:54:57

代码语言:javascript
复制
if($out = $_SESSION['admin_notices']) { 
      $_SESSION["admin_notices"] = ""; 
      echo $out; 
}

此条件始终为真,因此它总是重置$_会话‘’admin_notices‘var

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1242328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档