如果需要做前端提交表单,文本编辑器难免会用到wp_editor。
但是如果直接调用这个函数,就会出现一些问题。 首先,由于前端使用,比如在自定义页面模板中使用,上传的文件会附加到这个页面,而不是新创建的文章。 . 这也会导致另一个问题。 因为wp_editor默认是当前要编辑的页面,如果是非管理员用户,是无法上传文件的,因为通常页面是管理员创建的。
其实我们需要的不是编辑当前页面,而是使用wp_editor这样的编辑器来编辑文本和上传文件。 然后将内容传递给 wp_insert_post 以创建文章。
研究了WordPress后台发文章的代码,发现打开new-post.php页面后,后台默认创建了自动草稿,然后更新了草稿。
因此,在前台,如果我们要上传附件并将其附加到新创建的文章中,我们也需要这样做。
先介绍,并创建默认文章
<?phprequire_once( ABSPATH . 'wp-admin/includes/post.php' );$post = get_default_post_to_edit( 'post', true );$post_ID = $post->ID;wp_editor( '', 'content');?>
这样wp编辑器就绑定到了新创建的文章而不是当前页面。 然后,我们使用 wp_update_post 来更新这个帖子,而不是创建一个新帖子。
所以你可以在表单中添加:
” />
然后获取内容:
<?php$post = array('ID' =>$_POST['post_ID'], //获取传递过来的需要更新的文章id'post_author' => $user_id, //用户,一般定义为当前用户'post_title' => $_POST['title'],'post_content' => $_POST['content'],// 获取wp_editor中的内容'post_category' => array($_POST['cat']),'tags_input' => str_replace(',',',',$_POST['post_tags']),'post_status' => 'pending',// 'post_type' => $_POST['post_type']);$new_post_id = wp_update_post( $post );?>
注意:以上表格并不完整。 很多变量没有定义,不能直接复制使用。 这里是在WordPress编辑器前台上传文件并绑定到文章的问题。