将特定图像上载到特定文件夹

时间:2013-09-14 作者:Umesh Awasthi

我正试图找到一种方法将一些选择性图像上传到WordPress中的选择性文件夹中,但到目前为止还没有找到方法。

我不想更改默认的工作压力设置以上载图像,因为这在所有情况下都是必需的。

在一个旅游网站上工作,我需要在目的地介绍页面上显示目的地的图片。拟议结构。

每个目的地都属于一个州因此,例如,用户希望查看有关泰姬陵的详细信息,因此可以有多篇关于泰姬陵的帖子,但将有一个泰姬陵的通用登录页,其中包含有关该地方的帖子/文章列表。

在登录页上,我想显示几个有关该目的地的图像,我想将这些图像存储在以下结构中

wp-content\\uploads\\state-name\\destination
PS:对于每个目的地,都会有很少的介绍图片(最多2-3张),我想将它们上传到特定的文件夹

是否可以或需要手动创建这些文件夹结构

1 个回复
SO网友:gmazzap

在你的回答中,你说想要的路径是

wp-content\\uploads\\state-name\\destination\\
在哪里state-name 是一个分类术语destination 是一个目标CPT的段塞。从你的问题来看,最后一件事还不清楚,但似乎是这样,如果我错了,请告诉我)。

因此,我建议您使用以下工作流:

添加目标帖子->指定状态项->之后,使用刚刚创建的目标帖子中的媒体上载程序上载图像。

这样,我们可以检索当前附件的目标ID(作为$_GET[\'post_id\']), 然后检索指定的状态项,最后使用\'upload_dir\' 滤器

简单的事情:

add_filter(\'upload_dir\', \'set_destination_folder\', 999);

function set_destination_folder ( $upload_data ) {  

  if ( ! isset( $_REQUEST[\'post_id\']) )
    return $upload_data;
  $destination = get_post( $_REQUEST[\'post_id\'] );
  if ( empty($destination) || $destination->post_type != \'destinations\' )
    return $upload_data;
  $states = get_the_terms($_REQUEST[\'post_id\'], \'states\');
  if ( empty($states) || ! is_array($states) ) {
    $subdir = \'/destinations/\' . $destination->post_name;
  } else {
    $subdir = \'/\' . array_shift($states)->slug . \'/destinations/\' . $destination->post_name;
  }
  $dir = $upload_data[\'basedir\'] . $subdir;
  $url = $upload_data[\'baseurl\'] . $subdir;
  return wp_parse_args(array(\'path\'=>$dir, \'url\'=>$url, \'subdir\'=>$subdir), $upload_data);

}
这样,当您从目标帖子上载图像时,如果目标帖子作为指定状态(作为分类术语),则图像将上载到文件夹中

wp-content/{$state_slug}/destinations/{$destination_slug}/
如果目标帖子没有指定状态,则图像将保存在文件夹中

wp-content/destinations/{$destination_slug}/
如果将更多状态分配给目标,则将采用第一个状态。

注意,该代码假定目的地的cpt名称为,\'destinations\' 各州的分类名称是\'states\'.

结束

相关推荐

Plugins_url函数混合了系统路径和URL

在我的WordPress小部件中,我使用以下代码:wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ ))); 不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/