Wordpress: wyświetlanie komunikatu o błędzie - hak admin_notices nie powiedzie się na wp_insert_post_data lub publication_post

Dodaję sprawdzanie poprawności, więc jeśli post należy do określonej kategorii, konieczne jest ustawienie określonych pól niestandardowych.

To powinno być łatwe zaczepieniewp_insert_post_data iadmin_notices, ale istnieje przekierowanie, które powodujeadmin_notices oddzwanianie, aby zniknąć.

OK - utworzyłem hack, który wykorzystuje sesję do przechowywania mojego komunikatu o błędzie w przekierowaniu:

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");

Problem z tym rozwiązaniem jest takitrochęjak sesja nie jest dostępna podczas dzwonieniasession_admin_notice, co jest łatwe (alezwariowany) rozwiązanie:

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');

Pytanie brzmi: dlaczego muszę przechodzić przez całe to szaleństwo, aby wysłać komunikat o błędzie?

Co ja robię źle?

questionAnswers(3)

yourAnswerToTheQuestion