可以在WordPress中安排附件吗?

时间:2013-11-27 作者:hakre

众所周知,可以在Wordpress中安排发布帖子。

此外,附件实际上是帖子(在更内部的技术意义上)。

所以现在困扰我的问题是:是否也可以安排附件?例如,照片库会随着时间的推移而增长?

2 个回复
SO网友:gmazzap

我的想法是,您可以为附件设置发布日期。这可以使用attachment_fields_to_edit 要显示UI(可以使用touch_time 内部功能)。

之后,您可以过滤所有附件查询,以仅显示具有过去或当前日期的附件。

所以

add_action(\'load-post.php\', \'setup_attachment_fields\');

function setup_attachment_fields() {
  $scr = get_current_screen();
  if ( $scr->post_type === \'attachment\' ) {
    add_filter("attachment_fields_to_edit", "add_date_to_attachments", null, 2);
  }
}

function add_date_to_attachments( $form_fields, $post = NULL ) {    
  printf(\'<label for="content"><strong>%s</strong></label>\', __(\'Date\'));
  touch_time( 1, 1, 0, 1 );
  return $form_fields;
}
现在,在附件页面上,您将看到如下内容:

Attachments date

现在,让我们在附件保存时设置发布日期:

add_filter("attachment_fields_to_save", "save_date_to_attachments");

function save_date_to_attachments( $post ) {
  foreach ( array(\'mm\', \'jj\', \'aa\', \'hh\', \'mn\') as $f ) {
    $$f = (int) filter_input(INPUT_POST, $f, FILTER_SANITIZE_NUMBER_INT);
  }
  if ( ! checkdate ( $mm, $jj, $aa ) ) return; // bad data, man
  if ( ($hh < 0 || $hh > 24) ) $hh = 0;
  if ( ($mn < 0 || $mn > 60) ) $mn = 0;
  $ts = mktime($hh, $mn, 0, $mm, $jj, $aa);
  $date = date( \'Y-m-d H:i:s\', $ts );
  $date_gmt = date( \'Y-m-d H:i:s\', ( $ts + ( get_option( \'gmt_offset\' ) * HOUR_IN_SECONDS ) ) );
  $modified = current_time( \'mysql\');
  $modified_gmt = current_time( \'mysql\', true);
  global $wpdb;
  $data = array(
    \'post_date\' => $date,
    \'post_date_gmt\' => $date_gmt,
    \'post_modified\' => $modified,
    \'post_modified_gmt\' => $modified_gmt,
  );
   $wpdb->update( $wpdb->posts, $data, array( \'ID\' => $post[\'ID\'] ), \'%s\', \'%d\' );
}
保存附件后,发布日期将设置为您在日期字段中设置的任何日期。

但是,无论日期如何,附件都是可见的,因为WordPress不会在附件查询中检查日期。让我们在where子句中添加一个过滤器:

add_filter( \'posts_where\', \'not_future_attachment\', 9999, 2 );

function not_future_attachment( $where, $query ) {
  if ( is_admin() ) return $where;
  if ( $query->get(\'post_type\') === \'attachment\' ) {
    global $wpdb;
    $where .= $wpdb->prepare(
      " AND ($wpdb->posts.post_date <= %s)", current_time( \'mysql\')
    );
  }
  return $where;
}
现在,在gallery(或任何您想要的地方)的快捷代码中,请确保使用WP_Query 将post类型参数设置为\'attachment\'.

按标准[gallery] 快捷码由于使用get_children 如果查询过滤器被抑制,则必须创建自定义快捷码或覆盖默认值。

SO网友:fuxia

立即创建完整的库,使用自定义的短代码处理程序。

在您的快捷码处理程序中,只需计算降临日历的附件数,或查找附件的post meta。用占位符替换图像,或者完全隐藏图像(如果不应该看到)。

由于WordPress不参与直接文件请求,因此在上传时附件是公开的。

结束

相关推荐

Get Posts by IDs (optionally)

我想检查一个变量是否包含帖子ID列表,然后我只想查询那些ID的帖子,但如果该变量为空,那么我想显示所有帖子。问题:如果我将ID提供给post__in, 然后它会获取带有这些ID的帖子,但是如果它是空的,那么它应该返回all posts 但它没有返回任何帖子。例如,以下代码将获取ID为1、2、3的帖子。但是,如果$ids 为空。在这种情况下,它不应该返回所有帖子吗?如果$ids 是空的,即。$ids = \"\"; ?$ids = \'1,2,3\'; $arr = explode(\",\" ,$