Riportare tutti gli articoli di una categoria in bozza

Mi è capitato per il sito di IWA Italy di dover riportare tutti gli articoli afferenti ad una precisa categoria in bozza.

Poichè il numero di articoli era troppo elevato per effettuare un’operazione individuale ho dovuto fare un’operazione di massa utilizzando degli script mySQL.

Presupponendo di avere un’installazione di base di WordPress con una configurazione del DB di default ( prefisso alle tabelle wp_ ), la prima cosa da fare è identificare la categoria di nostro interesse:

select * from wp_terms where name='Mia Categoria';

avremo quindi le seguenti informazioni di nostro interesse:

  1. term_id: chiave primaria della tabella. Questa informazione è la più importante per noi.
  2. name:  è il nome “Friendly” della categoria o del tag.
  3. slug: invece è il nome così come viene utilizzato da WordPress per identificare negli url in modo univoco la categoria o il tag.

In questo momento però abbiamo un serio problema, “Mia Categoria” potrebbe essere un tag oppure una categoria. Sì perchè WordPress, conserva queste due informazioni nella stessa tabella, per cui dobbiamo arrivare ad identificare l’informazione di categoria. Tale informazione è conservata nella tabella wp_term_taxonomy.

Dalla tabella wp_term_taxonomy prendiamo in considerazione queste 3 informazioni:

  • term_taxonomy_id: la primary key della tabella
  • term_id: che è in realzione uno a molti con la tabella wp_terms (un term_id della tabella wp_terms, molti term_id della tabella wp_term_taxonomy)
  • taxonomy: che identifica il tipo di tassonomia (categoria, tag).

 

select
   taxonomy.term_taxonomy_id,
   taxonomy.term_id,
   terms.name,
   terms.slug
from
   wp_terms terms left join wp_term_taxonomy taxonomy on terms.term_id = taxonomy.term_id
where
   taxonomy.taxonomy = 'category' and
   terms.name = 'Mia Categoria';

A questo punto abbiamo selezionato solo le tassonomie “Mia Categoria”. Se però le categorie “Mia Categoria” fossero più di una avrebbero certamente uno slug differente quindi si potrebbe definire la condizione utilizzando terms.slug anzichè terms.name.

Dunque abbiamo a nostra disposizione l’informazione chiave: term_taxonomy_id.


Pubblicato

in

,

da

%d blogger hanno fatto clic su Mi Piace per questo: