【问题标题】:PHP globals in WordPress not returning expected valueWordPress中的PHP全局变量没有返回预期值
【发布时间】:2023-03-10 17:07:01
【问题描述】:

我正在制作一个两部分的表单,以允许用户在 WordPress 上创建帖子。

第一部分包含帖子标题、内容和链接,然后使用 AJAX 从该数据创建帖子。当使用wp_insert_post() 创建帖子时,会返回帖子 ID。

function makeblog_page2form (){

    global $make_post_id;

    if( check_admin_referer('page2form_submit','page2form_subform') ){

        // more code

        $make_post_id = wp_insert_post( $post );


        exit;

    } else{
        wp_redirect( home_url( '/submission-error/' ) );
        exit;
    }

}

第二部分获取一张图片并将其上传到 WordPress 画廊,然后将图片附加到帖子中,作为它的特色图片。对于图像提交,我使用Frontend Uploader,并在此插件中使用包含的add_action('fu_after_upload', callback_function)

当我尝试在add_action() 中使用$make_post_id 全局附加图像时遇到问题,没有返回任何内容。

add_action( 'fu_after_upload', function( $attachment_ids ) { 

    global $make_post_id;
    var_dump($make_post_id); // no return value

} );

这两者都在同一个 file.php 中。

如果这还不够清楚,请告诉我。谢谢。

【问题讨论】:

  • 在调用add_action()之前有输出吗?
  • 是的,它确实在函数中创建帖子并返回正确的帖子 ID。尝试将该 ID 传递到同一 PHP 文件中的另一个范围是有问题的。

标签: php wordpress upload


【解决方案1】:

尝试将此变量传递给匿名函数作用域:

global $make_post_id;
add_action( 'fu_after_upload', function( $attachment_ids ) use ($make_post_id){
    var_dump($make_post_id);
});

全局变量不会在单独的请求之间保留值,因此您可以通过第一次调用返回 post ID 表单并将其与上传的文件一起传递,或者将其存储并在 $_SESSION 数组中访问。

【讨论】:

  • 如果你在global ...add_action之间移动var_dump()
  • NULLNULL,这意味着它在创建后没有正确存储。
  • 帖子 ID 被分配给 makeblog_page2form 范围内的变量,但离开该范围后它不会存储。有什么想法吗?
  • 重新阅读您的问题,您是否在一个 ajax 请求中提交和创建帖子,以及在 ajax 返回帖子 ID 后上传图片?
  • 这样不行。您必须将此 ID 返回给 javascript 并将其与上传的文件一起传递,或者将其存储在 $SESSION 数组中。全局变量仅对一个请求有效。
猜你喜欢
  • 2010-09-11
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多