我正在使用WordPress创建一个网站,该网站允许用户上传远足路径文件(gpx(xml)文件)。
为此,用户访问一个名为“创建新轨道”的页面(这是具有特定模板的WordPress页面)。通过php创建的表单,用户输入远足的名称,简短说明,然后选择要上传的文件。然后,我的代码对输入的数据和所选文件进行常规检查。如果所有检查都通过,则将文件上传到服务器并创建一个新帖子(将输入的标题和说明以及文件添加到该帖子中)。
我希望文件上传完毕并创建新帖子后,用户访问一个网页,他可以在其中查看新创建的远足。我希望此页面成为名为“ Edit track”的第二个WordPress页面,该页面使用第二个特定模板。
我当前的计划是使用$ track_ID(参见代码-这是新创建的帖子的ID),并将其以url参数的形式添加到“编辑轨道” URL的url中。成功创建轨道后,如果“编辑轨道”页面自动打开,则将读取url参数并可以编辑适当的轨道。
我的问题是,我需要编写什么代码,以便成功创建新帖子后,即可访问“编辑曲目”页面?
我完全陷入了困境!我曾尝试使用php和Javascript,但无法锻炼如何做到这一点。欢迎所有想法!
我的代码框架已附加。
add_shortcode('sut_form', 'sut_form_shortcode');
function sut_form_shortcode() {
if (isset( $_POST['sut_form_create_track_submitted'] ) &&
wp_verify_nonce($_POST['sut_form_create_track_submitted'], 'sut_form_create_track') ) {
// LOTS OF CHECKS ON WHAT HAS BEEN ENTERED
}
else // ALL CHECKS PASSED, SO WE CAN CREATE THE POST
{
$track_data = array(
'post_title' => $sut_track_name,
'post_content' => $sut_track_text,
'post_status' => 'pending',
'post_author' => $current_user->ID,
'post_type' => 'tracks'
);
// Create track post and attach image
if ($track_id = wp_insert_post($track_data)) { // POST CREATED
wp_set_object_terms( $track_id, (int)$_POST['sut_track_category'], 'track_category'); // CATEGORY ASSIGNED TO POST
update_field('field_5bf39d97d1e8d', $movefile['url'], $track_id); // UPLOADED FILE ATTACHED TO POST
// PROBLEM!!! HOW DO I KNOW ACCESS THE URL FOR POST WHICH HAS JUST BEEN CREATED?
}
}
}
答案 0 :(得分:1)
您的函数已使用add_shortcode注册,因此在页面内容呈现期间执行该函数,现在使用header(“ location ...”为时已晚,因为标题可能已经发送到客户端。
我能想到的唯一解决方案是在不更改代码且不知道整个项目的情况下打印JavaScript代码段,如下所示:
$permalink = get_permalink($track_id);
echo("<script>window.location.replace('$permalink');</script>");
它不是很整洁,但是应该可以工作。