web-dev-qa-db-ja.com

特定の画像を特定のフォルダにアップロードする

私はWordPressの選択フォルダに選択画像をいくつかアップロードする方法を見つけようとしていますが、これまでのところ方法を見つけることができません。

すべての場合に必要なので、デフォルトのワークプレス設定を画像のアップロードに変更する必要はありません。

私は目的地紹介ページで目的地の画像を見せる必要がある旅行サイトに取り組んでいます。提案された構造。

  1. 各宛先は状態に属します。
  2. 各目的地は複数の投稿を持つことができます。

たとえば、ユーザーがTaj Mahalに関する詳細を表示したい場合は、Taj Mahalに関する複数の投稿がありますが、Taj Mahalの一般的なリンク先ページに、その場所に関する投稿/記事のリストが表示されます。

ランディングページで、目的地に関する画像をいくつか表示したいのですが、これらの画像を次の構造で保存したいです。

wp-content\uploads\state-name\destination

PS:それぞれの目的地について、少数の紹介画像(最大2〜3)があり、それらを特定のフォルダにアップロードしたい。

それは可能ですか、私は手動でこれらのフォルダ構造を作成する必要がありますか

5
Umesh Awasthi

あなたの答えでは、あなたは望ましい道は何かのようなものだと言った

wp-content\uploads\state-name\destination\

state-nameは分類学用語で、destinationは1つの行き先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}/

さらに多くの状態がdestinationに割り当てられている場合は、最初の状態が採用されます。

このコードでは、宛先のcpt名は'destinations'、州の分類名は'states'であると想定しています。

4
gmazzap