如果你需要制作一个前端提交内容的表单,文本编辑器自然不可避免的要用到wp_editor。
但是如果直接调用这个函数会出现一些问题,第一个,由于在前端使用,比如你在一个自定义的页面模板中使用,那么上传的文件会附属到这个页面上,而不是新创建的文章上。同样也会导致另一个问题,由于wp_editor默认了编辑的内容是当前页面,所以如果是非管理员用户,是无法上传文件的,因为通常页面是由管理员创建的。
实际上,我们需要并不是编辑当前的页面,而是利用wp_editor这样一个编辑器,编辑文本,上传文件。然后将内容传递到wp_insert_post创建文章。
研究WordPress后台发布文章的代码后,发现后台是在打开new-post.php页面后就默认创建了一个自动草稿,然后再更新这篇草稿。
因此在前台,我们如果要上传附件,并附属到新建的文章中我们也需要这样做。
首先引入,并创建默认文章
1 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">require_once</span><span class="token punctuation">(</span> <span class="token constant">ABSPATH</span> <span class="token punctuation">.</span> <span class="token single-quoted-string string">'wp-admin/includes/post.php'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$post</span> <span class="token operator">=</span> <span class="token function">get_default_post_to_edit</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'post'</span><span class="token punctuation">,</span> <span class="token boolean constant">true</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$post_ID</span> <span class="token operator">=</span> <span class="token variable">$post</span><span class="token operator">-</span><span class="token operator">></span><span class="token property">ID</span><span class="token punctuation">;</span> <span class="token function">wp_editor</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">''</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'content'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> |
如此wp编辑器就绑定到新建的文章而不是当前的页面了。然后,我们使用wp_update_post来更新这篇文章,而不是新建一篇文章。
因此可以在表单中添加:
<input type=”hidden” name=”post_ID” value=”<?php echo $post_ID?>” />
然后获取到内容:
1 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token variable">$post</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'ID'</span> <span class="token operator">=</span><span class="token operator">></span><span class="token global">$_POST</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'post_ID'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token comment">//获取传递过来的需要更新的文章id</span> <span class="token single-quoted-string string">'post_author'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$user_id</span><span class="token punctuation">,</span> <span class="token comment">//用户,一般定义为当前用户</span> <span class="token single-quoted-string string">'post_title'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token global">$_POST</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'title'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'post_content'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token global">$_POST</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'content'</span><span class="token punctuation">]</span><span class="token punctuation">,</span><span class="token comment">// 获取wp_editor中的内容</span> <span class="token single-quoted-string string">'post_category'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token global">$_POST</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'cat'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'tags_input'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token single-quoted-string string">','</span><span class="token punctuation">,</span><span class="token single-quoted-string string">','</span><span class="token punctuation">,</span><span class="token global">$_POST</span><span class="token punctuation">[</span><span class="token single-quoted-string string">'post_tags'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'post_status'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'pending'</span><span class="token punctuation">,</span> <span class="token comment">// 'post_type' => $_POST['post_type']</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$new_post_id</span> <span class="token operator">=</span> <span class="token function">wp_update_post</span><span class="token punctuation">(</span> <span class="token variable">$post</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> |
注意:上述表单并不完整,许多变量没有定义,不能直接复制使用。这里讲的是WordPress编辑器前台上传文件并绑定到文章的问题。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。