it-swarm.com.de

Verwenden von file_exists, um Dateien in Uploads zu überprüfen

Kontext: Für die Bilder einer Site, die in einem bestimmten Abschnitt verwendet werden, basiert jeder Beitrag auf einem Basisnamen, der in Metadaten eingegeben wird. Dieser wird dann mit automatischen Erweiterungen verwendet, um große Bilder, Miniaturbilder der Galerie und Indexseiten-Miniaturbilder zu generieren.

Wenn zum Beispiel Example_Name der Basisname ist, dann:
Example_Name_2-LG.jpg ist das zweite große Bild in der Serie
Example_Name_2_SM.jpg ist das entsprechende Miniaturbild der zweiten Galerie
Example_Name_IN.jpg ist die Index-Miniaturansicht, die für den Satz ausgewählt wurde

Durch die Verwendung von Metadaten und PHP Bedingungen muss der Client nur einmal den Basisnamen eingeben und die entsprechend benannten Bilder in den Ordner Uploads hochladen, und die Seitenvorlage füllt die Lücken aus.

All dies funktioniert gut, mit einem Haken. Es gibt sieben Speicherplätze für die Miniaturansichten und auf der Seite wird all der Miniaturansichten angezeigt, auch wenn sich weniger als sieben Miniaturansichten im Ordner "Uploads" befinden.

Ich möchte jedes Miniaturbild-Div mit einer Bedingung umschließen, die file_exists verwendet, um zu überprüfen, ob Miniaturbilder tatsächlich im Upload-Ordner vorhanden sind. Wenn das benannte Bild im angegebenen Dateipfad nicht vorhanden ist, wird das entsprechende leere Div ( und sein Hyperlink) werden nicht angezeigt.

Ich habe versucht, absolute Pfade mit der Funktion wp_uploads_dir sowie mit der Funktion bloginfo('template_directory') und sogar mit dem veralteten Namen TEMPLATEPATHzu konstruieren, aber es ist mir nur gelungen, PHP Fehler zu generieren. Ich gehe davon aus, dass dies ein Pfadproblem ist oder etwas Besonderes, das ich über die PHP -Funktion file_exists nicht verstehe.

Beispiel für eine Seiten-Vergrößerung mit 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 } ?>

Anregungen geschätzt.

1
boomturn

Sie können eine Datei-URL in file_exists() nicht wie folgt verwenden:

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

Sie sollten lieber einen absoluten Dateipfad verwenden, zum Beispiel:

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

Dann solltest du es versuchen

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

woher

$upload_basedir = WP_CONTENT_DIR . '/uploads';

oder

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

In dieser Zeile ...

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

... du willst nicht alle diese echos. Sie versuchen nicht, irgendetwas zu echo. Sie haben sogar echos mit String-Verkettung durchsetzt. Lass all das weg.

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

Ich würde wahrscheinlich früher nach dem Post-Meta suchen und den Aufruf von file_exists überspringen, wenn der Meta-Schlüssel leer ist.

$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

Sie sollten __DIR__ verwenden. Angenommen, Sie überprüfen die functions.php -Datei, dann wäre dies:

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