Utilizarea file_exists pentru verificarea fișierelor în directorul Uploads
Context: Pentru imaginile unui site utilizate într-o anumită secțiune, fiecare postare se bazează pe un nume de bază stocat în meta date, care apoi este folosit cu extensii automate pentru a genera imagini mari, miniaturi pentru galerie și o miniatură pentru pagina de index.
De exemplu, dacă Example_Name este numele de bază, atunci:
Example_Name_2-LG.jpg
este a doua imagine mare din serie
Example_Name_2_SM.jpg
este miniatura corespunzătoare celei de-a doua imagini din galerie
Example_Name_IN.jpg
este miniatura pentru index aleasă pentru a reprezenta setul
Folosind meta date și condiționale PHP, tot ce trebuie să facă clientul este să introducă numele de bază o singură dată și să încarce imaginile cu numele corespunzătoare în directorul Uploads, iar șablonul paginii completează restul.
Totul funcționează bine, cu o singură problemă. Există șapte sloturi pentru miniaturi, iar pagina afișează toate div-urile pentru miniaturi, chiar dacă există mai puțin de șapte imagini miniatură în directorul Uploads.
Aș dori să înconjor fiecare div de miniatură cu o condiție care folosește file_exists
pentru a verifica existența imaginilor miniatură în directorul Uploads, astfel încât dacă imaginea numită nu există la calea de fișier indicată, div-ul gol corespunzător (și hyperlink-ul său) să nu apară.
Am încercat să construiesc căi absolute folosind funcția wp_uploads_dir
, precum și bloginfo('template_directory')
și chiar învechitul TEMPLATEPATH
, dar am reușit doar să generez erori PHP. Presupun că aceasta este o problemă de cale sau ceva particular pe care nu îl înțeleg despre funcția PHP file_exists
.
Exemplu de eroare folosind 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"> <!-- Ar trebui să apară doar când Example_Name_7_SM.jpg există -->
...
</div>
<?php } ?>
Orice sugestii sunt apreciate.
Nu poți folosi o URL de fișier în file_exists()
astfel:
file_exists( "http://example.com/wp-content/uploads/Example_Name_2_SM.jpg" );
Ar trebui să folosești în schimb o cale absolută a fișierului, de exemplu:
file_exists( "/cale/absoluta/catre/wp-content/uploads/Example_Name_2_SM.jpg" );
Apoi ar trebui să încerci
$meta = get_post_meta( $post->ID, '_meta_example_name', true );
$file = $upload_basedir . '/' . $meta . '_7_SM.jpg';
if ( file_exists( $file ) ) {
//...
}
unde
$upload_basedir = WP_CONTENT_DIR . '/uploads';
sau
$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];

În această linie...
if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg')` )
... nu dorești toate acele echo
. Nu încerci să afișezi (echo
) nimic. Ai chiar și echo
intersperse cu concatenare de șiruri. Lasă-le pe toate afară.
if (
file_exists( $upload_dir['baseurl'].'/'.get_post_meta($post->ID,'_meta_example_name',true).'_7_SM.jpg')
)
Probabil aș verifica meta-ul postului mai devreme și aș omite apelul la file_exists
dacă cheia meta este goală.
$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')
) {
// markup-ul tău
}

dacă ai nevoie pentru tema poți folosi funcția mea
function file_checker($file){
//http://localhost/wordpress/wp-content/themes/NUMELE_TEMEI
$location = get_template_directory_uri();// poți edita această linie <=
$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));
}
folosește
if(file_checker("/style.css")){
echo "Fișierul există";
}else{
echo "Eroare la locație, verifică codul";
}
