Utilizzo di file_exists per verificare i file nella cartella Uploads

2 giu 2013, 02:08:32
Visualizzazioni: 32.7K
Voti: 3

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.

1
Commenti

Prima di tutto, hai controllato la documentazione PHP per questa funzione? Proprio come il Codex, è un riferimento essenziale.

brasofilo brasofilo
2 giu 2013 03:13:20
Tutte le risposte alla domanda 4
0

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'];
2 giu 2013 08:13:00
0

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
}
2 giu 2013 07:56:24
0

Dovresti utilizzare __DIR__. Quindi, assumendo che tu stia verificando all'interno del file functions.php, sarebbe:

if(file_exists(__DIR__ . '/../../uploads/Example_Name_2_SM.jpg')){
    // Fai qualcosa ...
}
22 mar 2019 19:59:00
0

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";
}
9 lug 2020 17:46:31