Usar file_exists para verificar archivos en Uploads
Contexto: Para las imágenes de un sitio usadas en una sección particular, cada entrada depende de un nombre base guardado en metadatos, que luego se usa con extensiones automáticas para generar imágenes grandes, miniaturas de galería y una miniatura de página de índice.
Por ejemplo, si Example_Name es el nombre base, entonces:
Example_Name_2-LG.jpg
es la segunda imagen grande en la serie
Example_Name_2_SM.jpg
es la correspondiente segunda miniatura de galería
Example_Name_IN.jpg
es la miniatura de índice elegida para representar el conjunto
Usando metadatos y condicionales PHP, el cliente solo tiene que ingresar el nombre base una vez y subir las imágenes con los nombres apropiados a la carpeta Uploads, y la plantilla de página completa los espacios en blanco.
Todo esto funciona bien, con un detalle. Hay siete espacios para las miniaturas, y la página muestra todos los divs de miniaturas, incluso si hay menos de siete imágenes en miniatura en la carpeta Uploads.
Me gustaría envolver cada div de miniatura con un condicional que use file_exists
para verificar la existencia de imágenes en miniatura realmente en la carpeta Uploads, de modo que si la imagen nombrada no existe en la ruta de archivo indicada, el div vacío correspondiente (y su hipervínculo) no aparezca.
He intentado construir rutas absolutas usando la función wp_uploads_dir
, así como bloginfo('template_directory')
e incluso el obsoleto TEMPLATEPATH
, pero solo he logrado generar errores PHP. Asumo que esto es un problema de ruta o algo particular que no entiendo sobre la función PHP file_exists
.
Ejemplo de error en la página usando 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"> <!-- Debería aparecer solo cuando Example_Name_7_SM.jpg existe -->
...
</div>
<?php } ?>
Cualquier sugerencia es apreciada.
No puedes usar una URL de archivo en file_exists()
de esta manera:
file_exists( "http://example.com/wp-content/uploads/Example_Name_2_SM.jpg" );
Deberías usar mejor una ruta absoluta de archivo, por ejemplo:
file_exists( "/ruta/absoluta/hacia/wp-content/uploads/Example_Name_2_SM.jpg" );
Entonces deberías probar
$meta = get_post_meta( $post->ID, '_meta_ejemplo_nombre', true );
$file = $upload_basedir . '/' . $meta . '_7_SM.jpg';
if ( file_exists( $file ) ) {
//...
}
donde
$upload_basedir = WP_CONTENT_DIR . '/uploads';
o
$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];

En esta línea...
if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg')` )
... no quieres todos esos echo
. No estás intentando hacer echo
de nada. Incluso tienes echo
intercalados con concatenación de cadenas. Omite todos esos.
if (
file_exists( $upload_dir['baseurl'].'/'.get_post_meta($post->ID,'_meta_example_name',true).'_7_SM.jpg')
)
Probablemente comprobaría el meta del post antes y saltaría la llamada a file_exists
si la clave meta está vacía.
$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')
) {
// tu marcado
}

Si necesitas para tu tema puedes usar mi función
function file_checker($file){
//http://localhost/wordpress/wp-content/themes/NOMBREdelTEMA
$location = get_template_directory_uri();// puedes editar esto <=
$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));
}
uso
if(file_checker("/style.css")){
echo "El archivo existe";
}else{
echo "Error de ubicación, revisa tu código";
}
