Quando inseriamo un nuovo contenuto su WordPress, come un post o una pagina, viene creata una nuova voce nel database con un ID numerico progressivo.
L’id numerico è utile in tutta una serie di funzioni php per riferirci a quel contenuto e ricavare informazioni utili.

Apriamo phpMyAdmin e diamo un’occhiata al database di una nuova installazione di WordPress.

id-post-page-wordpress

tabella wp_posts

L’immagine  mostra una porzione della tabella wp_posts in cui vediamo i contenuti presenti di default in tutte le installazioni del cms e cioè l’articolo Ciao mondo! e la pagina chiamata Pagina di esempio.
Se proviamo ora a inserire un nuovo articolo o una pagina vediamo che la tabella sarà popolata di nuovi valori. I contenuti presenti in wp_posts non sono limitati agli articoli  e alle pagine ma comprendono tutti i tipi di post-type , come le revisioni, le voci di menu, e i custom post type.

Colonna Post Type della tabella wp_posts

colonna post_type di wp_posts

Come trovare l’id di un post di WordPress

Abbiamo due opzioni oltre a quella di aprire phpMyAdmin e cercare nel database.

Direttamente nell’URL

permalink-predefiniti-wordpress

Se stiamo utilizzando i permalink predefiniti è possibile estrapolare l’ID direttamente nelle query string ?p=8 per i post e ?page_id=2 per le pagine. Cioè bisogna visitare la pagina o il post e controllare l’URL nel browser.

Per i tipi di post personalizzati troveremo un url simile a questo ?post_type=recensione&p=67 dove ‘recensione’ è il post type e il numero 67 è l’ID. Funziona solo se durante la definizione del nuovo custom post ‘recensione’ abbiamo passato il parametro ‘query_var’ => false (altrimenti avremo un URL del genere ?recensione=slug-post).

Nell’URL delle schermate di modifica di post o pagine.

Altro metodo per ricavare l’id di un post. Aprendo una pagina di modifica di un contenuto troviamo la query string post=id. Vale per gli articoli, pagine, e custom post e non dipende dal tipo di permalink che stiamo utilizzando.

ricavare-id-editor-pagine-post

Ora che sappiamo come ricavare L’ID di un post type vediamo una serie di esempi utili per ricavare informazioni dal database o effettuare altre operazioni comuni.

Ricavare informazioni sul post fuori dal loop

Immagine in evidenza (thumbnail) associata a un post

Otteniamo l’immagine in evidenza con le dimensioni definite per le ‘thumbnail’. Viene generato tutto il tag <img> compreso dei parametri width, height, src, alt, title.

echo get_the_post_thumbnail( $id ,'thumbnail' );
// <img width="150" height="150" src="http://dominio.it/url-immagine.jpg" class="attachment-thumbnail wp-post-image" alt="slug-post" />

Nel prossimo esempio stampiamo l’indirizzo dell’immagine da cui è stata creata la thumbnail, a dimensioni originali e senza tag html.

echo wp_get_attachment_url( get_post_thumbnail_id( $id ) ) ;
// http://dominio.it/url-immagine-dimensioni-reali.jpg

Come sopra senza tag html, però questa volta otteniamo il link della thumb alle dimensioni definite per ‘thumbnail’. Nota che al posto di thumbnail possiamo inserire tutte le dimensioni personalizzate che abbiamo creato con add_image_size()

$thumb = wp_get_attachment_image_src( get_post_thumbnail_id( $id ), 'thumbnail' );
echo $thumb['0'];
// http://sito.com/url-foto-150X150.jpg

Tassonomie e termini

Visualizzare le categorie associate a un post

// categorie del post
echo  get_the_term_list( $id, 'category', ' ', ' ' ) ;

Se abbiamo creato una tassonomia personalizzata chiamata argomento

// argomento del post
echo  get_the_term_list( $id, 'argomento', ' ', ' ' ) ;

I tag sono trattati allo stesso modo delle categorie e delle altre tassonomie.

// argomento del post
echo  get_the_term_list( $id, 'post_tag', ' ', ' ' ) ;

Specifico per le categorie

$categorie = get_the_category( $id ) ;

foreach ( $categorie as $cat )
{
	echo $cat->name . '<br />';
}

Permette di ricavare anche altre informazioni della categoria sostituendo ‘name‘ con un’altra proprietà presente tra parentesi quadre.

print_r( get_the_category( $id ) );
/* se al post è stata assegnata solo la categoria 'worpress'
(
    [0] => stdClass Object
        (
            [term_id] => 2
            [name] => WordPress
            [slug] => wordpress
            [term_group] => 0
            [term_taxonomy_id] => 2
            [taxonomy] => category
            [description] =>
            [parent] => 0
            [count] => 9
            [filter] => raw
            [cat_ID] => 2
            [category_count] => 9
            [category_description] =>
            [cat_name] => WordPress
            [category_nicename] => wordpress
            [category_parent] => 0
        )

)
*/

L’omologo di get_the_category( $id ) per le tassonomie create da noi get_the_terms()

print_r( get_the_terms( $id , 'Argomento' ) ) ;

‘WordPress’ in questo caso non è la ‘categoria’ ma ‘argomento’ del post.

(
    [0] => stdClass Object
        (
            [term_id] => 2
            [name] => WordPress
            [slug] => wordpress
            [term_group] => 0
            [term_taxonomy_id] => 34
            [taxonomy] => Argomento
            [description] =>
            [parent] => 0
            [count] => 13
            [filter] => raw
        )

)

Altre informazioni sul post

Titolo del post.

echo get_the_title( $id );

Data di pubblicazione del post.

echo '<time>' . get_the_date( 'd M Y' , $id ) . '</time>';

 

Post meta

Ricaviamo un array con tutti le coppie chiave / valore inserite in un campo personalizzato o in un metabox aggiuntivo.

$campi = get_post_meta( $id )

Se conosciamo la chiave che ci interessa possiamo filtrare l’array inserendola come secondo parametro

get_post_meta( $id, 'num_telefono' )

Verifica condizioni in base all’id (tag condizionali) e restituisce true

I commenti del post sono abilitati?

comments_open( $id );

Il post contiene un’immagine di anteprima?

has_post_thumbnail( $id )

Il post contiene un estratto?

has_excerpt( $id )

Il post è stato pubblicato?

if ( 'publish' === get_post_status( $id ) )
{
	echo 'post pubblicato';
}

Stiamo visualizzando la pagina di cui passiamo l’id?

is_page( $id )

Ottenere l’oggetto di un unico post a partire dall’id

Con get_post() (da non confondere con get_posts()) otteniamo l’oggetto del post a partire dal suo id.

$art = get_post( $id );
print_r( $art );
/*
WP_Post Object
(
    [ID] => 868
    [post_author] => 1
    [post_date] => 2014-10-11 13:39:11
    [post_date_gmt] => 2014-10-11 11:39:11
    [post_content] => Testo e immagini del post
    [post_title] => Settare un cookie su wordpress: Rotazione sequenziale dei banner o post:
    [post_excerpt] =>
    [post_status] => publish
    [comment_status] => open
    [ping_status] => open
    [post_password] =>
    [post_name] => settare-cookie-wordpress-rotazione-sequenziale-dei-banner-post
    [to_ping] =>
    [pinged] =>
    [post_modified] => 2014-10-30 11:55:38
    [post_modified_gmt] => 2014-10-30 10:55:38
    [post_content_filtered] =>
    [post_parent] => 0
    [guid] => http://localhost/isw/?p=868
    [menu_order] => 0
    [post_type] => post
    [post_mime_type] =>
    [comment_count] => 0
    [filter] => raw
)
*/

Come sempre accediamo alle proprietà che ci interessano con la sintassi

echo $art->post_title;

Modificare la tabella wp_posts

La funzione wp_update_post()  permette di modificare un post specificato tramite id.

wp_update_post( $post );

wp_update_post() accetta un array di elementi che caratterizzano ogni post. Esiste una relazione uno a uno tra questi elementi e il nome delle colonne che formano la tabella wp_posts del database.
per cui l’array può essere

$post = array(
    'ID'           => $id,
   'post_title' => 'Nuovo titolo post'
);
$post = array(
  'ID'             => [ $id ]
  'post_content'   => [ stringa ] // The full text of the post.
  'post_name'      => [ stringa ] // The name (slug) for your post
  'post_title'     => [ stringa ] // The title of your post.
  'post_status'    => [ 'draft' | 'publish' | 'pending'| 'future' | 'private' | custom registered status ] // Valore di default Default 'draft'.
  'post_type'      => [ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] // Tipo di post. Default 'post'.
  'post_author'    => [ user id ] L'id dell'autore, di defaul è l'utente loggato.
  'ping_status'    => [ 'closed' | 'open' ] I Pingbacks or trackbacks sono attivi?. Il valore di default dipenda dall'opzione 'default_ping_status'.
  'post_parent'    => [ ID di un post ] // Stabilisce l'id del post genitore nel caso delle pagine.
  'menu_order'     => [ ordine nel menu] // L'ordine in un eventuale menu che lo supporta
  'to_ping'        => // Url a cui effettuare un poing
  'pinged'         => // Elenco di ping a cui e stato mandato un ping
  'post_password'  => [ stringa ] // password del post
  'guid'           => // lasciare che sia wordpress a crearlo.
  'post_content_filtered' => // Contenuto del post filtrato. Lasciar fare a worpdress.
  'post_excerpt'   => [ <string> ] // estratto del post
  'post_date'      => [ Y-m-d H:i:s ] // Data del post.
  'post_date_gmt'  => [ Y-m-d H:i:s ] // Data del post in GMT.
  'comment_status' => [ 'closed' | 'open' ] // Commenti abilitati o chiusi. Il valore di default dipende dall'opzione 'default_comment_status'
  'post_category'  => [ array(<category id>, ...) ] // Array che contiene id di categoria
  'tags_input'     => [ '<tag>, <tag>, ...' | array ] // Elenco di tag separati da virgola o tramite array.
  'tax_input'      => [ array( <taxonomy> => <array | string> ) ] // Tassonomie personalizzate
  'page_template'  => [ stringa ] // Nome di un file di template. Vuoto di default
);

Creare un nuovo post

Una funzione simile a quella precedente è wp_insert_post() e permette di creare nuovi post direttamente da codice php. Accetta un array simile a quello precedente e restituisce l’ID del post creato.

// Crea l'oggetto del post
$my_post = array(
  'post_title'    => 'Mio post',
  'post_content'  => 'Contenuto del post',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array( 3, 45)
);

// Inserisce il post nel databse
wp_insert_post( $my_post );

  inStileWeb.com
blog comments powered by Disqus