WordPress中的附件工作流

时间:2018-10-09 作者:Michael N.

我正在寻找一种方法来启用/使用上载文件的工作流(在我的案例图片中)。具有特定角色/功能的用户应该能够上载连接到帖子的文件。贴子还有一个自定义字段,用于保存在贴子视图中用作图库的数组。

我想要的是:
1。用户上载文件2。附件帖子是通过media\\u handle\\u upload生成的。附件获取“挂起”post\\u状态
4。Id已添加到数组
5。管理员只需更改post\\u状态,并且图片可见

在这种情况下,只显示带有post_status != "pending". 据我所知,这在Wordpress上是不可能的。

目前我的两个解决方案是:
1。图片正常后,让管理员将文件添加到数组中。为附件帖子使用元字段以获取工作流

是否有我目前没有看到的Worpress方式,或者我应该使用我的两种解决方案之一?

我正在使用Wordpress 4.9.8

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

下面是我如何实现一个简单的媒体工作流的。安全检查和消毒取决于每个人。

基于Wordpress版本:4.9.8

创建附件帖子|处理介质

if (!empty($_FILES) && isset($_POST[\'postid\'])) {
  media_handle_upload("attachments", $_POST[\'postid\']);
}
使用时,附件不可能处于挂起状态media_handle_upload. 在这种情况下,需要使用过滤器。使用前应添加此筛选器media_handle_upload.

add_filter(\'wp_insert_attachment_data\', \'SetAttachmentStatusPending\', \'99\');

function SetAttachmentStatusPending($data) {
  if ($data[\'post_type\'] == \'attachment\') {
    $data[\'post_status\'] = \'pending\';
  }

  return $data;
}
现在,附件帖子添加了挂起的post\\u状态。

在媒体库中显示挂起的帖子

Worpress媒体库仅显示具有private或inherit post\\u状态的帖子。要显示具有挂起状态的帖子,我们可以挂接

add_action(\'pre_get_posts\', array($this, \'QueryAddPendingMedia\'));

function QueryAddPendingMedia($query)
{
  // Change query only for admin media page
  if (!is_admin() || get_current_screen()->base !== \'upload\') {
    return;
  }

  $arr = explode(\',\', $query->query["post_status"]);
  $arr[] = \'pending\';
  $query->set(\'post_status\', implode(\',\', $arr));
}
操作和批量操作要完成工作流,我们需要发布挂起的媒体。为此,我们可以向媒体库添加(批量)操作。

添加批量操作

add_filter(\'bulk_actions-upload\', \'BulkActionPublish\');

function BulkActionPublish($bulk_actions)
{
  $bulk_actions[\'publish\'] = __(\'Publish\');

  return $bulk_actions;
}
添加行操作要添加到行操作的链接,此代码很有用

add_filter(\'media_row_actions\', \'AddMediaPublishLink\', 10, 3);

function AddMediaPublishLink(array $actions, WP_Post $post, bool $detached)
{
  if ($post->post_status === \'pending\') {
    $link = wp_nonce_url(add_query_arg(array(\'act\' => \'publish\', \'itm\' => $post->ID), \'upload.php\'), \'publish_media_nonce\');
    $actions[\'publish\'] = sprintf(\'<a href="%s">%s</a>\', $link, __("Publish"));
  }

  return $actions;
}
处理操作
add_action(\'load-upload.php\', \'RowActionPublishHandle\');
add_filter(\'handle_bulk_actions-upload\', \'BulkActionPublishHandler\', 10, 3);

function BulkActionPublishHandler($redirect_to, $doaction, $post_ids)
{
  if ($doaction !== \'publish\') {
    return $redirect_to;
  }

  foreach ($post_ids as $post_id) {
    wp_update_post(array(
      \'ID\' => $post_id,
      \'post_status\' => \'publish\'
    ));
  }

  return $redirect_to;
}

function RowActionPublishHandle()
{
  // Handle publishing only for admin media page
  if (!is_admin() || get_current_screen()->base !== \'upload\') {
    return;
  }

  if (isset($_GET[\'_wpnonce\']) && wp_verify_nonce($_GET[\'_wpnonce\'], \'publish_media_nonce\')) {
    if (isset($_GET[\'act\']) && $_GET[\'act\'] === \'publish\') {
      wp_update_post(array(
        \'ID\' => $_GET[\'itm\'],
        \'post_status\' => \'publish\'
      ));
    }
  }
}

结束

相关推荐

Publication Workflow

我正在考虑担任以下两个角色:一篇文章可以处于以下不同的状态:草稿已准备好发布,我正在寻求的工作流程是:李安editor 写一篇博客文章。这是一个draft.</一旦定稿,编辑将ist标记为ready for publication. 从那一刻起,编辑looses the ability to edit the blogpost.publisher 审查、编辑和publishes the blogpost.这是否可以通过Wordpress实现如果没有,是否有用于此类工作流的最新插件<这似乎是一个