为什么变量值清空在$_POST中可用,而在$_请求中可用?

时间:2017-10-12 作者:Digvijayad

我正试图通过以下教程向我的主题添加自定义元框:https://www.sitepoint.com/adding-meta-boxes-post-types-wordpress/.

我可以看到meta框,它从数据库中获取值(通过手动更新post meta进行尝试)。然而,它从未得到更新。我尝试通过var\\u dump(ing)调试$_POST 数组,它显示变量值为空,但该值存在于$_REQUEST. 有人知道原因吗?

调用缺少的变量post-excerpt.这是我的密码。

function buziness_add_custom_box() {
// Adding layout meta box for page
 add_meta_box(
    \'offer-post-excerpt\',
    esc_html__( \'Excerpt\', \'buziness\'),
    \'buziness_post_excerpt\',
    \'post\',
    \'normal\',
    \'default\'
 );
}
接下来是回调函数:

function buziness_post_excerpt($post){
// Add a nonce field so we can check for it later
// Use nonce for verification
wp_nonce_field( basename( __FILE__ ) , \'custom_excerpt_nonce\' );

$value = get_post_meta($post->ID, \'_excerpt\', true );

echo \'<textarea style="width:100%" id="post_excerpt" name="post_excerpt">\' . esc_attr( $value ) . \'</textarea>\';
echo "<p>Excerpts are optional hand-crafted summaries of your content that can be used in your theme</p>";
}

这是连接到的函数save_post

add_action(\'save_post\', \'buziness_save_post_excerpt\');
/**
* save the custom excerpt metabox data
* @hooked to save_post hook
*/
function buziness_save_post_excerpt($post_id) {
    // Checks save status

    var_dump($_POST);
    var_dump($_REQUEST);
    wp_die($_REQUEST);
    $is_autosave = wp_is_post_autosave( $post_id );

    $is_valid_nonce = ( isset( $_POST[ \'custom_excerpt_nonce\' ] ) && wp_verify_nonce( $_POST[ \'custom_excerpt_nonce\' ], basename( __FILE__ ) ) ) ? \'true\' : \'false\';

    // Exits script depending on save status
    if ( $is_autosave || !$is_valid_nonce ) {
       return;
    }

    // Check the user\'s permissions.
    if ( isset( $_POST[\'post_type\'] ) && \'post\' == $_POST[\'post_type\'] ) {

        if ( ! current_user_can( \'edit_page\', $post_id ) ) {
           return;
       }

   }
   else {

        if ( ! current_user_can( \'edit_post\', $post_id ) ) {
            return;
        }
   }


   // Checks for input and sanitizes/saves if needed
   if( isset( $_POST[ \'post_excerpt\' ] ) ) {
       update_post_meta( $post_id, \'_excerpt\', sanitize_text_field( $_POST[ \'post_excerpt\' ] ) );
   }
}
以下是var_dump($_POST)

\'ping_status\' => string \'open\' (length=4)
\'add_comment_nonce\' => string \'c641d598b3\' (length=10)
\'_ajax_fetch_list_nonce\' => string \'1e9f1f3f06\' (length=10)
\'post_name\' => string \'online-training\' (length=15)
\'post_author_override\' => string \'1\' (length=1)
\'custom_excerpt_nonce\' => string \'0cd0a833c4\' (length=10)
\'post_excerpt\' => string \'\' (length=0)
\'post_mime_type\' => string \'\' (length=0)
\'ID\' => int 96
以及var_dump($_REQUEST)

\'ping_status\' => string \'open\' (length=4)
\'add_comment_nonce\' => string \'c641d598b3\' (length=10)
\'_ajax_fetch_list_nonce\' => string \'1e9f1f3f06\' (length=10)
\'post_name\' => string \'online-training\' (length=15)
\'post_author_override\' => string \'1\' (length=1)
\'custom_excerpt_nonce\' => string \'0cd0a833c4\' (length=10)
\'post_excerpt\' => string \'TES t \' (length=6)
正如您所看到的,\'post_excerpt\' 的输出中为空$_POST.

1 个回复
SO网友:Mark Kaplun

使用$_REQUEST 这是一种糟糕的做法。之间post 请求,get 请求和cookie您无法确定您正在处理实际的用户输入,而不是URL或浏览器内存中留下的垃圾。

元框已“发布”,因此仅限使用$_POST 在处理它们时。

代码的另一个方面是,您试图访问不属于“您的代码”的内容。总是喜欢使用任何API,而不是试图从全球访问它们。虽然我看不出任何人会这样做的原因,但在某个时候,可能有人会有一个很好的想法,从$_POST 因为一些想象的(或不太想象的)原因。此外,还有一些API,如保存处理程序will 被调用来处理根本不是来自浏览器的“保存”,在这种情况下,这些全局变量可能为空或包含垃圾。

Ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh。它本身就是一大罐蠕虫。始终为全局范围内的所有内容添加前缀。

结束

相关推荐

如何从Metabox更新编辑器内容

您好,我正在尝试更新和添加metabox中的编辑器内容,但未使用默认编辑器,因此我尝试使用wp\\u update\\u post($数组);但不起作用它会引起问题致命错误:最大函数嵌套级别为“100”那么,是否可以在不使用默认编辑器的情况下从metabox添加或更新帖子内容