Consigli necessari > Conversione delle assegnazioni di categorie in valori di meta personalizzati per i post
Prima di scoprire la possibilità di aggiungere un meta box (con selezioni di meta personalizzati) all'editor di pagine e post, stavo (e in parte lo faccio ancora) utilizzando le categorie per definire meta personalizzati per i post.
Ad esempio, per rendere un post nofollow o noindex, ho creato una categoria chiamata nofollow e un'altra chiamata noindex e ho assegnato una o entrambe queste categorie a un post o pagina.
Poi nel mio file header.php, eseguivo un test in_category per scrivere i meta tag appropriati nella pagina.
Esempio:
<?php
if (in_category('noindex') && in_category('nofollow')){?>
<meta name="robots" content="noindex, nofollow">
<?php}?>
Ho anche categorie personalizzate per cose come "Disabilita Adsense per questa pagina", "Non mostrare allegati immagine per questa pagina", "Nascondi questa pagina dai menu", ecc...
Ora che ho deciso di passare dall'uso delle categorie all'uso di meta personalizzati per i post, il codice sopra in header.php diventa invece...
<?php
if (get_post_meta( $post->ID, '_noindex', true ) && get_post_meta( $post->ID, '_nofollow', true )){>?
<meta name="robots" content="noindex, nofollow">
<?php } ?>
Questo è il mio piano, ma ora ho il problema di aggiornare i siti che utilizzano il vecchio metodo di definizione delle opzioni personalizzate tramite l'assegnazione di categorie.
Ho bisogno di una routine che riconverta i valori delle categorie in meta valori personalizzati per ogni post e pagina nel sito che sto aggiornando.
Cerco solo alcuni consigli rapidi su come procedere e possibilmente alcuni suggerimenti di codice per la routine necessaria.
Poiché questo è un tema che può essere aggiornato, come parte del processo di aggiornamento, vorrei eseguire uno script una sola volta, quando il tema viene installato per la prima volta (o quando l'utente fa clic sul mio strumento di aggiornamento), che scorre la tabella delle opzioni e per ogni istanza di una delle mie assegnazioni di categorie personalizzate, crea l'assegnazione di meta personalizzata richiesta per quel post o pagina.
Ad esempio, se un post appartiene attualmente alla categoria "Hidden", gli verrebbe assegnato il meta post "_hidden".
Spero di aver spiegato bene la situazione. Apprezzo qualsiasi suggerimento tu possa fornire.
Forse è semplice come una serie di istruzioni SQL personalizzate da eseguire per ogni possibile assegnazione di categoria?

L'idea di base sarebbe quella di scorrere i post e le loro categorie, assegnando meta in caso di corrispondenze.
Qualcosa come questo (assicurati di verificare su una copia di prova dei dati, ecc., ecc.):
$posts = get_posts( array(
'numberposts' => -1
) );
foreach( $posts as $post ) {
$categories = get_the_category( $post->ID );
foreach( $categories as $category ) {
if( 'Nascosto' == $category->name )
add_post_meta( $post->ID, '_hidden', 'si', true );
}
}
Ho dimenticato di aggiungere l'eliminazione una volta completato:
$category = get_category_by_slug( 'nascosto' );
wp_delete_category( $category->term_id );

Sembra buono Rarst. Proverò e ti farò sapere. Grazie mille per la risposta rapida e completa.

Potrebbe non essere una buona idea se hai un database molto grande. La maggior parte dei siti potrebbe probabilmente caricare tutti gli articoli contemporaneamente, ma se hai migliaia di articoli potrebbe superare il tempo massimo di esecuzione PHP o qualcosa del genere. WP Core fa cose come questa in blocchi usando AJAX. Dovrebbe esserci un plugin che fa questo, ma non riesco a trovarne uno.

Se hai rimosso attentamente la categoria dall'articolo anziché cancellarla completamente, potresti usare un piccolo numero come 500 articoli e semplicemente ricaricare la pagina/premere il pulsante finché non ci sono più articoli nella query della categoria.
