web-dev-qa-db-ja.com

File_existsを使用してアップロードファイルをチェックする

コンテキスト:特定のセクションで使用されているサイトの画像の場合、各投稿はメタデータに追加されたベース名に依存します。メタデータは自動拡張機能で大きな画像、ギャラリーサムネイル画像、インデックスページサムネイルも生成します。

たとえば、Example_Nameがベース名の場合は、次のようになります。
Example_Name_2-LG.jpgはシリーズの2番目の大きな画像です
Example_Name_2_SM.jpgは、対応する2番目のギャラリーのサムネイル画像です
Example_Name_IN.jpgはセットを表すために選ばれたインデックスサムネイルです

メタデータとPHP条件文を使用することで、クライアントはベース名を1回入力して適切な名前の画像をUploadsフォルダにアップロードするだけで、ページテンプレートに空白が入ります。

これはすべてうまくいっています、1つのキャッチで。サムネイル用のスロットが7つあり、Uploadsフォルダにあるサムネイル画像が7つ未満であっても、ページにはサムネイルdivの all が表示されます。

指定された画像が指定されたファイルパスに存在しない場合、対応する空のdiv()が存在するように、それぞれのサムネイルdivをfile_existsを使用してUploadsフォルダに実際にサムネイル画像が存在するかチェックそのハイパーリンクは表示されません。

私はwp_uploads_dir関数、bloginfo('template_directory')そして廃止予定のTEMPLATEPATHを使って絶対パスを構築しようと試みましたが、PHPエラーを生成することに成功しただけです。これはパスの問題、またはPHP関数file_existsについて理解できない具体的な問題であると考えています。

Wp_upload_dirを使用したページ拡大例

<?php 
    $upload_dir = wp_upload_dir(); 
    if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg') ) {
?>
    <div id="thumb7" class="thumb">  <!-- Should appear only when Example_Name_7_SM.jpg exists -->
        ...
    </div>

<?php } ?>

任意の提案は大歓迎です。

1
boomturn

file_exists() ファイルurl を使用することはできません。

file_exists( "http://example.com/wp-content/uploads/Example_Name_2_SM.jpg" );

たとえば、 絶対ファイルパス を使用してください。

file_exists( "/absolute/path/to/wp-content/uploads/Example_Name_2_SM.jpg" );

それならあなたは試すべきです

$meta = get_post_meta( $post->ID, '_meta_example_name', true );
$file = $upload_basedir . '/' . $meta . '_7_SM.jpg';
if ( file_exists( $file ) ) {
   //...
}

どこで

$upload_basedir = WP_CONTENT_DIR . '/uploads';

または

$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];
2
birgire

この行では...

if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg')` )

...あなたはそれらすべてのechoを欲しくはありません。あなたは何もechoしようとしていません。あなたはechosを文字列連結で散在させることさえしました。それらをすべて残してください。

if ( 
  file_exists( $upload_dir['baseurl'].'/'.get_post_meta($post->ID,'_meta_example_name',true).'_7_SM.jpg') 
)

私はたぶん先にポストメタをチェックし、メタキーが空の場合はfile_existsへの呼び出しをスキップします。

$upload_dir = wp_upload_dir();
$meta_name = get_post_meta($post->ID,'_meta_example_name',true);
if (
  !empty($meta_name)
  && file_exists( $upload_dir['baseurl'].'/'.$meta_name.'_7_SM.jpg') 
) {
  // your markup
}
1
s_ha_dum

__DIR__を使うべきです。 functions.phpファイル内をチェックしているとしたら、次のようになります。

if(file_exists(__DIR__ . '/../../uploads/Example_Name_2_SM.jpg')){
    // Do something ...
}
0
Max