Wordpress: creare un listato di directory in una pagina

Wordpress: creare un listato di directory in una pagina

Dopo aver cercato invano una soluzione su Google che mi permettesse di creare un listato di directory in una pagina di Wordpress a partire da una directory contenente documenti statici, sono approdato ad una soluzione PHP che richiede uno script per la creazione del listato ed uno shortcode da creare nel file functions.php di un tema. Ecco la soluzione.

Il file che indicizza le directory ha il seguente codice:


function searchDir($dir)
{

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

    if ($file->isFile() && $file->isReadable()) {
  
      if(preg_match('/\.html$/', $file)) {
      
        $uri = substr_replace($file->getPathname(), '', 0, strlen($_SERVER['DOCUMENT_ROOT']));
        $doc = file_get_contents($file->getPathname());
        $titles = preg_match('/<title>.+<\/title>/', $doc, $matches);
        $title = strip_tags($matches[0]);
        
        
        if(preg_match('/index\.html/', $uri)) {
        
          $uri = str_replace('index.html', '', $uri);
        
        }
        
        $fullURL = 'http://' . $_SERVER['HTTP_HOST'] . $uri;
        
        $pages[] = array($fullURL, $title);
      
      }
  
    }


  }
  
  return $pages;
}

$examples = searchDir($_SERVER['DOCUMENT_ROOT'] . '/directory');
$html = '<ul>' . "\n";

foreach($examples as $example) {

   $url = $example[0];
   $title = $example[1];
   
   
   $html .= '<li><a href="' . $url . '">' . $title . '</a></li>' . "\n";



}

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

echo $html;

Chiamatelo index.php o in altro modo ed inseritelo nella directory da cui far partire l'indicizzazione o dovunque vogliate. Lo script crea la seguente struttura HTML:


<ul>
<li><a href="percorso">Titolo file</a></li>
<!--altri file-->
</ul>

A questo punto dobbiamo creare uno shortcode nel file functions.php del nostro tema di Wordpress:


/** Adds */

function directory_listing() {

  $output = '<ul>';
  $file = file_get_contents('http://tuosito.it/directory/');
  $li = preg_match_all('#<li>.+</li>#', $file, $matches);
  $lis = $matches[0];
  
  foreach($lis as $item) {

    $output .= $item;
  }

  $output .= '</ul>';

  return $output;
}

add_shortcode('directory', 'directory_listing');

Infine, create una qualsiasi pagina ed inserite lo shortcode directory nel corpo della stessa. Ovviamente potete cambiare l'espressione regolare usata nella funzione di indicizzazione per selezionare il tipo di file che volete.

Torna su