Edit Post VS Custom Form

时间:2011-03-01 作者:idea

我有一个博客,它严重依赖于用户生成的内容。

我希望我的用户能够创建帖子,但帖子必须只有特定字段:

  • 标题
  • 内容
  • 附加图像
  • 两个元数据字段(谷歌地图中的纬度、经度)
  • 标签(仅预先存在的标签)
    • 是否最好:

      a) 允许用户访问“编辑帖子”屏幕,并以不同的方式设置其样式(这可能吗?)orb)开发自定义页面/表单以提交帖子?

      到目前为止,我选择了第二种选择(代码如下),但我不确定我是否走对了路。

      if (isset($_POST[\'photo-title\']) && !empty($_FILES) ) { 
      
          // The user submitted the form.
      
          // Create the post object.
          $post = array(
      
               // Forget the lack of validation for now ;)
      
               \'post_title\' => $_POST[\'photo-title\'],
               \'post_content\' => $_POST[\'photo-description\'],
               \'post_status\' => \'publish\',
               \'post_type\' => \'post\',
               \'post_author\' => $user_ID,
               \'post_category\' => array(5)
            );
      
          // Insert the post into the database.
          $post_id = wp_insert_post( $post );
      
          // If the post was successful
          if ($post_id) {
      
              // Add metadata for the photo
              add_post_meta($post_id, \'ob_latitude\', $_POST[\'latitude\']);
              add_post_meta($post_id, \'ob_longitude\', $_POST[\'longitude\']);
          }
      
      
          // Handle the photo upload.
          $attach_id = media_handle_upload(\'photo\', $post_id );
      }
      

1 个回复
最合适的回答,由SO网友:wyrfel 整理而成

如果让他们访问管理界面是一种选择,那么您就更安全、更省力了。

在这种情况下,您可以根据需要实现自定义帖子类型,在注册时禁用大多数“支持”标志,并添加自己的元框以支持纬度和经度。

使用一些额外的插件(如成员或任何其他能够编辑角色和功能的插件),您甚至可以将权限分配给这些应该能够编辑该帖子类型的用户。

所有这些都在法典中有很好的记录,而且相对容易做到。

如果您选择前端表单选项,那么您基本上只需要挖掘代码并尝试在前端重新实现它,这对您的学习体验来说并不是一件坏事,但这将花费您更长的时间。

Update: 在前端开发post表单。

首先,我仍然建议创建一个单独的自定义帖子类型。它允许您更轻松地将用户输入与其他内容分离,并允许您灵活地分配特定功能。

在何处查找内容我要做的是仔细查看以下文件,确保您了解发生的情况:

  • wp-admin/post.php - 尤其是处理动作的部分wp-admin/includes/post.php - 尤其edit_post()wp_write_post()
  • wp-admin/edit-form-advanced.php - 很好地理解UI和它触发的动作之间的关系,因为您也想允许上传,所以还需要了解媒体方面的内容:

    • wp-admin/includes/media.php - 尤其media_handle_upload(), media_upload_form_handler()media_upload_form()
    • wp-admin/includes/file.php - 确保您理解wp_handle_upload()
    • wp-admin/includes/image.php - 至少可以看看上传时附件会发生什么情况,当然,你必须包括这一点,如何进行,你最好的出发点是复制wp-admin/post.php 除去你所需要的一切来挽救这篇文章。尽可能多地消除不必要的依赖关系,但要保留保存帖子所涉及的函数调用。

      请记住,您使用的核心WP函数越多,级别越高,就越能在不同版本之间保持兼容,免费获得的健全性检查也就越多。

      然后看看wp-admin/edit-form-advanced.php 它是一种依赖关系,目的是确定您的UI可能需要什么,以及如何在使用尽可能多的WP代码的同时提供这些。同时看看comment_form() 用于启发前端表单实现的功能。

      这其中的一部分将是理解nonce机制(其实并不那么复杂)。

      首先确保你的帖子内容有效。。。也就是说,您的用户可以创建并可能编辑/删除他们的帖子,并且您可以正确存储所有数据。

      然后添加元数据UI并将其存储。进行此操作时,请尝试使用挂钩。例如,如果使用WP函数将帖子存储到db,则save_post 挂钩将运行。使用它来存储元数据。这是因为你做这类事情越多,就越容易适应WP的变化,甚至改变你做事的方式,你自己。使用挂钩可以隐式地模块化您的功能。

      完成所有这些工作后,实现上载表单和上载处理脚本。我发现,媒体功能需要一点时间才能真正掌握。这是因为他们中的很多人都被AJAX驱动的管理端媒体Thickbox所困扰。然而,一旦你想出了如何将作物从垃圾中分离出来,你只需要打几个电话就可以运行媒体上传。

      使用他在回答中提供的函数Bainternetthis question.

      最后,确保为每个操作提供良好的用户反馈。当然,这在前端比在管理端更重要,所以请确保让用户知道发生了什么。再次尝试了解WP是如何处理这一问题的(它使用两种不同的机制将消息从一个页面传递到下一个页面)。

      最后,形成示例,here\'s an example of a post and upload form 我写了一个照片比赛插件,希望很快能发布。虽然插件不使用常规附件,但它会为它们创建自己的类似附件的帖子类型,因此这比您的案例要复杂一些。它还使用了基于cookie的评论者识别机制,因为它最终对未登录的用户开放。所有这些你可能都不需要,但是,无论如何,寻找灵感可能是件好事(除非你想重复使用media_upload_form(), 可能)。

结束

相关推荐

posts and cms and posts again

我正在建立一个可湿性粉剂网站作为一个CMS,将出售CD。我在一个我称之为录音的页面上设置了单独的标题,并有许多类别组成了光盘集。不过,我不确定这是否是将网站设置为CMS的最佳方式。此外,我想在网站的“关于我们”部分下设置另一个博客页面。这是否可能,因为我已经将录制页面分配为帖子页面?或者我可以只在帖子页面上写一个博客条目,然后只调用那些帖子吗?除了使用POST方法之外,还有没有更好的方法来创建“录音”数据库?