WordPress: creare uno shortcode per ottenere un listato di directory

In WordPress è semplice creare uno shortcode per ottenere un listato di directory.

Il seguente codice utilizza gli iteratori di directory di PHP per estrarre il percorso dei file da una directory a scelta e restituire degli URL assoluti.

Aggiungete il codice al file functions.php del vostro tema:


<?php
function my_search_dir( $dir ) {

  $pages = array();
  
  foreach( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ) ) as $file ) {

    if ( $file->isFile() && $file->isReadable() ) {
  
      if( preg_match( '/\.zip$/', $file ) ) {
        
        $zip = $file->getPathname();
        
        $pages[] = $zip;
      
      }
      
      if( preg_match('/\.pdf$/', $file ) ) {
            	  
      	  	$pdf_doc = $file->getPathname();
      	  	
      	        	  	
      	  	$pages[] = $pdf_doc;
      	  		
      
      }
  
    }


  }
  
  return $pages;
}

function my_sort_by_date( $a, $b ) {
     
     $time1 = filectime($a);
     $time2 = filectime($b);
     
     return $time1 < $time2;
     
     
}

function my_directory_listing( $atts ) {

  extract( shortcode_atts( array(
    'dir' => ''
  ), $atts ) );

  $files = my_search_dir( $_SERVER['DOCUMENT_ROOT'] . '/' . $dir );
  usort( $files, 'my_sort_by_date' );
  
  $html = '<ul>' . "\n";


  foreach($files as $file) {
  
    $uri = substr_replace( $file, '', 0, strlen( $_SERVER['DOCUMENT_ROOT'] ) );
    $full_url = 'http://' . $_SERVER['HTTP_HOST'] . $uri;
        
        $html .= '<li><a href="' . $full_url . '">' . $file . '</a></li>' . "\n";
  
  
  }

  $html .= '</ul>' . "\n";

  return $html;
}

add_shortcode( 'directory', 'my_directory_listing' );

Quindi possiamo usare il seguente shortcode:


[directory dir="documenti"]

Le due espressioni regolari usate, ossia:


/\.zip$/
/\.pdf$/

selezionano file ZIP e PDF. È sufficiente modificare queste espressioni regolari per selezionare altri tipi di file.

Torna su