Posts tagged: wordpress

Top 10 WordPress tips 2009

wordpress1Siamo alla fine del 2009 e come si fa in questi casi è tempo di bilanci. Volevo stilare una classifica dei migliori 7 tips (trucchi) per wordpress che ho usato e trovato in rete. WordPress si sta affermando sempre più come piattaforma di blogging e CMS quindi spero risulti utile a chiunque visiti le pagine del mio sito.
 
 

1. Pubblicare un post su WordPress dall’esterno di WordPress

Questo tip è quello che mi è piaciuto più di tutti…non l’ho ancora mai provato ma sicuramente lo farò in futuro. Il codice che segue permette di pubblicare un post su wordpress dall’esterno di wordpress, utilizzando cURL ovvero delle librerie php che permettono di simulare un web browser…più precisamente permettono di utilizzare tra gli altri il protocollo HTTP facendo submit dei dati di un form ad esempio.
Per utilizzare questa funzionalità è necessario attivare XMLRPC all’interno del file php.ini presente nell’installazione di php. Se non la si attiva non sarà possibile inserire il contenuto dei post all’interno del database.
Vediamo il codice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function add_post_to_wordpress($title, $body, $rpcurl, $username, $password, $category, $keywords='', $encoding='UTF-8') {
    $title = htmlentities($title,ENT_NOQUOTES,$encoding);
    $keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);
 
    $content = array(
        'title'=>$title,
        'description'=>$body,
        'mt_allow_comments'=>0,  // 1 to allow comments
        'mt_allow_pings'=>0,  // 1 to allow trackbacks
        'post_type'=>'post',
        'mt_keywords'=>$keywords,
        'categories'=>array($category)
    );
    $params = array(0,$username,$password,$content,true);
    $request = xmlrpc_encode_request('metaWeblog.newPost',$params);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_URL, $rpcurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    $results = curl_exec($ch);
    curl_close($ch);
    return $results;
}

2. Visualizzare il numero di parole contenute in un post

E’ possibile contare il numero di parole che compongono un post per visualizzarlo, ad esempio, alla fine del post stesso. Basta aggiungere il seguente pezzo di codice all’interno del file function.php

1
2
3
4
5
6
7
8
9
10
function post_word_count(){
    /* Attiva l'output buffering */
    ob_start();
    /* Ottieni il contenuto del post */
    the_content();
    /* Preleva e ripulisci il contenuto del buffer */
    $content = ob_get_clean();
    /* Calcola il numero delle parole*/
    return sizeof(explode(" ", $content));
}

Al termine per richiamare la funzione è sufficiente effettuare la chiamata:

<?=post_word_count()?>

3. Ottenere la prima immagine di un post e visualizzarla

Questo tip è stato uno dei più quotati del 2009 dal sito WpRecipes. Dall’intero del contenuto di un post è possibile prelevare l’immagine contenuta al suo interno e visualizzarla.

1
2
3
4
5
6
7
8
9
10
11
12
13
function get_first_post_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all(\'//i\', $post->post_content, $matches);
  $first_img = $matches [1] [0];
 
  if(empty($first_img)){ //Defines a default image
    $first_img = "/images/default.jpg";
  }
  return $first_img;
}

Il codice di sopra va inserito all’interno del file function.php in modo che sia disponibile ai file del tema corrente. Al termine è possibile richiamarlo nel seguente modo:

1
<?=get_first_post_image()?>

4. Usare SSL per l’accesso al pannello di amministrazione

Per aumentare la sicurezza durante gli accessi al pannello di amministrazione di wordpress è possibile abilitare il protocollo SSL. SSL è un protocollo crittografico che permette una comunicazione sicura e integrità dei dati trasmessi su reti che utilizzano il protocollo TCP-IP, come internet. Per abilitarlo è sufficiente aggiungere la seguente riga di codice all’interno del file wp-admin.php:

1
define('FORCE_SSL_ADMIN', true);

5. Potenziare la funzionalità di ricerca

E’ possibile aumentare la potenzialità della ricerca integrata all’interno di wordpress evidenziando ad esempio i risultati trovati.

1
2
3
4
5
6
 $title = get_the_title();
 $keys= explode(" ",$s);
 $title = preg_replace('/('.implode('|', $keys) .')/iu',
	'<strong class="search-excerpt">\0</strong>',
	$title);
<br />

Il codice di sopra va inserito all’interno del file search.php del vostro tema corrente. Al termine aggiungete all’interno del vostro foglio di stile il codice per evidenziare i risultati della ricerca:

1
strong.search-excerpt { background: yellow; }

6. Override del nome dell’autore utilizzando un custom field

Se dal vostro blog permette la pubblicazione di post ad utenti guest, allora questo tip può esservi utile. In sostanza si tratta della creazione di un custom field che memorizza il nome dell’autore del post. Quindi in fase di visualizzazione del post se presente il custom field, si preleva il contenuto; altrimenti utilizzando la funziona predefinita di wordpress, si ottiene il nome dell’autore.
Vediamo come:

1
2
3
4
5
6
$author = get_post_meta($post->ID, "guest-author", true);
if ($author != "") {
    echo $author;
} else {
    the_author();
}

7. Riutilizzare i vecchi post

Questo tip permette di riutilizzare i vecchi post cercando di sfruttarli anche se sono stati pubblicare molto tempo fa. Per monetizzare i vecchi post è possibile ad esempio far comparire banner pubblicitari, ad esempio, solo se il post è più vecchio di 15 giorni.
Il codice che segue riconosce se il post è più vecchio di 15 giorni e in caso positivo aggiunge un banner pubblicitario.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function is_old_post($post_id=null){
   $days = 15;
   global $wp_query;
   if(is_single() || is_page()) {
      if(!$post_id) {
         $post_id = $wp_query->post->ID;
      }
      $current_date = time();
      $offset = $days *60*60*24;
      $post_id = get_post($post_id);
      $post_date = mysql2date('U',$post_id->post_date);
      $cunning_math = $post_date + $offset;
      $test = $current_date - $cunning_math;
      if($test > 0){
         $return = true;
      }else{
         $return = false;
      }
   }else{
      $return = false;
   }
   return $return;
}

Il codice di sopra va inserito all’interno del file function.php in modo che sia disponibile ai file del tema corrente. Al termine è possibile richiamarlo nel seguente modo dall’interno del file singel.php:

1
2
3
<? if(is_old_post()){ ?>
INSERIRE IL CODICE QUI
<? } ?>

Stay tuned!

Personalizzare il pannello di admin dei custom fields in WordPress

wordpress1Come avrei potuto non avere a che fare con WordPress !? Provate un pò a dirmelo….il mitico CMS semplice da usare, gestire e facile da installare. Non ho mai parlato sul blog di wordpress, ne di quanto lo usi a lavoro..Tutti i giorni il caro inkiostro mi riempie sempre di nuovi e mirabolanti problemi da risolvere in wordpress, quindi mi sono fatto una discreta cultura.
Quello di cui volevo parlare è di come fare a rendere più chiara l’organizzazione dei custom field all’interno del pannello di amministrazione di wordpress, raggruppandoli semanticamente all’interno di un riquadro. Per intenderci dalla situazione in figura :

campi-personalizzati-wp2

passare a questa:

Pannello dei custom field 

Vediamo il codice php per realizzare quanto mostrato in figura:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$box_dati_devme =
	array(
	    "titolo" => array(
	    "name" => "titolo",
	    "std" => "",
	    "title" => "Titolo",
	    "description" => ""),
 
	"url" => array(
	    "name" => "url",
	    "std" => "",
	    "title" => "URL",
	    "description" => ""),
 
	"argomento" => array(
	    "name" => "argomento",
	    "std" => "",
	    "title" => "Argomento",
	    "description" => ""));

Primo step: definire una variabile di tipo array in cui il primo elemento ha come chiave il nome del campo custom e come valore, un array che definisce il nome alcuni attributi del campo custom, nome, std, title e description.

1
2
3
4
5
6
7
8
9
10
11
function box_dati_devme_boxes() {
	global $post, $box_dati_devme;
	echo '';
	foreach($box_dati_devme as $meta_box) {
		echo '';
		echo '';
		echo '';
		echo '';
	}
	echo '<table style="width:99%"><tbody><tr><td class="left" style="width:25%;">'; 		$meta_box_value = get_post_meta($post->ID, $meta_box['name'], true); 		if($meta_box_value == "") 			$meta_box_value = $meta_box['std']; 		echo '<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />'; 		echo $meta_box['title']; 		echo '<br />'; 		echo '<label class="desc" style="font-size:10px;" for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label>'; 		echo '</td><td>'; 		echo '<textarea style="width:99%" rows="2" name="'.$meta_box['name'].'_value">'.$meta_box_value.'</textarea>'; 		echo '</td></tr></tbody></table>';
}

Secondo step: definire una funziona in cui l’unica cosa da fare è aggiungere come variabile globale dopo $post il nome della variabile definita allo step uno e la stessa variabile come iteratore del foreach.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function create_meta_box() {
    global $theme_name;
 
    if ( function_exists('box_dati_devme_boxes') ) {
        add_meta_box('box_dati_devme', 'Boxe DevMe', 'box_dati_devme', 'post', 'normal', 'high');
    }
}
 
function save_postdata( $post_id ) {
	global $post, $box_dati_devme;
 
	foreach($box_dati_devme as $meta_box) {
		if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
			return $post_id;
		}
		if ( 'page' == $_POST['post_type'] ) {
			if ( !current_user_can( 'edit_page', $post_id ))
				return $post_id;
		} else {
			if ( !current_user_can( 'edit_post', $post_id ))
				return $post_id;
		}
		$data = $_POST[$meta_box['name'].'_value'];
		if(get_post_meta($post_id, $meta_box['name']) == "")
			add_post_meta($post_id, $meta_box['name'], $data, true);
		elseif($data != get_post_meta($post_id, $meta_box['name'], true))
			update_post_meta($post_id, $meta_box['name'], $data);
		elseif($data == "")
			delete_post_meta($post_id, $meta_box['name'], get_post_meta($post_id, $meta_box['name'], true));
	}
}
 
add_action('admin_menu', 'create_meta_box');
add_action('save_post', 'save_postdata');

Terzo step: nell’ultimo step ho racchiuso un pò di cose tutte assieme. Si definiscono 2 funzioni : la create_meta_box e la save_postdata. La prima viene richiamata dal framework di wordpress per creare il riquadro, contestualmente si definiscono il nome del riquadro che comparirà poi in pagine e si aggiunge il riferimento alla variabile definita nello step uno. La funzione save_postdata viene usata da wordpress per effettuare il salvataggio dei custom field inseriti al momento dell’inserimento e della modifica di un post. Infine si registrano le 2 funzioni php con le add_action di wordpress.
E’ chiaro che in presenza di pochi custom field si può procedere anche senza personalizzare il pannello; al contrario, con un centinaio di campi il tutto diviene più chiaro. Consiglio nel caso usiate questa soluzione, di definire la personalizzare dei campi all’interno di un file .php che terrete all’interno del tema che state usando, quindi importarlo all’interno del file function.php.
Prova il generatore qui.
Stay tuned.

WordPress Themes