Utilizzo di file_exists per verificare i file nella cartella Uploads
Contesto: Per le immagini di un sito utilizzate in una sezione particolare, ogni post si basa su un nome base inserito nei meta data, che viene poi utilizzato con estensioni automatiche per generare immagini grandi, miniature della galleria e una miniatura della pagina indice.
Per esempio, se Example_Name è il nome base, allora:
Example_Name_2-LG.jpg
è la seconda immagine grande della serie
Example_Name_2_SM.jpg
è la corrispondente seconda miniatura della galleria
Example_Name_IN.jpg
è la miniatura dell'indice scelta per rappresentare il set
Utilizzando i meta data e i condizionali PHP, il cliente deve solo inserire il nome base una volta e caricare le immagini con i nomi appropriati nella cartella Uploads, e il template della pagina completa automaticamente i campi.
Tutto questo funziona bene, con un'eccezione. Ci sono sette slot per le miniature, e la pagina visualizza tutti i div delle miniature, anche se ci sono meno di sette immagini miniatura nella cartella Uploads.
Vorrei racchiudere ogni div delle miniature con un condizionale che utilizzi file_exists
per verificare l'esistenza delle immagini miniatura effettivamente presenti nella cartella Uploads, in modo che se l'immagine nominata non esiste nel percorso file indicato, il div vuoto corrispondente (e il suo hyperlink) non appaia.
Ho provato a costruire percorsi assoluti utilizzando la funzione wp_uploads_dir
, così come bloginfo('template_directory')
e anche il deprecato TEMPLATEPATH
, ma sono riuscito solo a generare errori PHP. Presumo che questo sia un problema di percorso o qualcosa di particolare che non capisco della funzione PHP file_exists
.
Esempio di errore della pagina usando wp_upload_dir:
<?php
$upload_dir = wp_upload_dir();
// Controlla se il file esiste nel percorso specificato
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"> <!-- Dovrebbe apparire solo quando Example_Name_7_SM.jpg esiste -->
...
</div>
<?php } ?>
Qualsiasi suggerimento è apprezzato.

Non puoi usare un URL di file in file_exists()
in questo modo:
file_exists( "http://example.com/wp-content/uploads/Example_Name_2_SM.jpg" );
Dovresti invece utilizzare un percorso assoluto del file, ad esempio:
file_exists( "/absolute/path/to/wp-content/uploads/Example_Name_2_SM.jpg" );
Quindi dovresti provare
$meta = get_post_meta( $post->ID, '_meta_example_name', true );
$file = $upload_basedir . '/' . $meta . '_7_SM.jpg';
if ( file_exists( $file ) ) {
//...
}
dove
$upload_basedir = WP_CONTENT_DIR . '/uploads';
oppure
$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];

In questa riga...
if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg')` )
... non vuoi tutti quei echo
. Non stai cercando di visualizzare (echo
) nulla. Hai addirittura dei echo
mescolati con la concatenazione di stringhe. Lasciali tutti fuori.
if (
file_exists( $upload_dir['baseurl'].'/'.get_post_meta($post->ID,'_meta_example_name',true).'_7_SM.jpg')
)
Probabilmente controllerei prima il post meta e saltare la chiamata a file_exists
se la chiave meta è vuota.
$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')
) {
// il tuo markup
}

se hai bisogno per il tema puoi usare la mia funzione
function file_checker($file){
//http://localhost/wordpress/wp-content/themes/NOMEtema
$location = get_template_directory_uri();// puoi modificare questo <=
$location = str_replace("http://","",$location);
$location = str_replace("https://","",$location);
$location = str_replace($_SERVER['HTTP_HOST'],"",$location);
$location = $_SERVER['DOCUMENT_ROOT'].$location;
$filename = $location.$file;
return (file_exists($filename));
}
utilizzo
if(file_checker("/style.css")){
echo "Il file esiste";
}else{
echo "Errore di percorso, controlla il tuo codice";
}
