Come posso creare un listato di directory in WordPress?

Come posso creare un listato di directory in WordPress?

In WordPress a volte può esservi l'esigenza di mostrare i contenuti di una directory, specie se stiamo gestendo molti file. La soluzione è semplice.

La soluzione che segue presuppone che i vostri file non siano stati inseriti come allegati nella Media Library. Si tratta di una soluzione sconsigliata ma che può verificarsi specie se stiamo gestendo un sito preesistente.

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:


function 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 sort_by_date( $a, $b ){
     
     $time1 = filectime( $a );
     $time2 = filectime( $b );
     
     return $time1 < $time2;
     
     
}

function directory_listing( $atts ) {

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

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


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

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

	return $html;
}

add_shortcode( 'directory', '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