Wordpress自定义元框验证

Rak*_*esh 5 wordpress

有没有办法在不使用javascript的情况下验证自定义元框字段.如果它没有验证我想要阻止帖子保存到数据库.

mai*_*o84 3

由于“save_post”操作是在发布和更新之后运行的,因此如果没有黑客替代方案,实际上无法验证自定义密钥。

但是,我认为您可以通过按照 Viral 建议的方式使用“save_post”来模仿您想要的功能,而不是在验证错误时中断或取消保存过程,您可以完全删除帖子:

add_action('save_post', 'validate_meta');
function validate_meta($post_id)
{
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
      return $post_id;
    /*USE THIS ONLY IF YOU ARE UTILIZING NONCE FIELDS IN A CUSTOM META BOX
    if ( !wp_verify_nonce( $_POST['metabox_nonce'], basename(__FILE__) ) )
      return $post_id;*/
    /*Use plugin_basename(__FILE__) if this is an actual plugin, rather than
    a part of your theme*/

    if ( 'page' == $_POST['post_type'] ) 
    {
        if ( !current_user_can( 'edit_page', $post_id ) )
            return $post_id;
    }
    else
    {
        if ( !current_user_can( 'edit_post', $post_id ) )
            return $post_id;
    }

    /*VALIDATE YOUR METADATA HERE HOWEVER YOU LIKE
    if(is_valid($_POST['metadata']))
        $validated = true;
    else
        $validated = false;
    */

    if(!$validated)
        wp_delete_post($post_id, true);
    else
        return $post_id;
}
Run Code Online (Sandbox Code Playgroud)

使用这种方法唯一需要注意的是它也将在发布和更新上运行。您可能需要考虑添加一项检查,以确保仅删除新发布的帖子,并将更新的帖子回滚到以前的版本,并删除无效的修订版本。