Necesită sfaturi > Conversia atribuirilor de categorii în valori meta personalizate pentru postări

16 sept. 2010, 21:24:41
Vizualizări: 130
Voturi: 1

Înainte să aflu despre posibilitatea de a adăuga o cutie meta (cu selecții meta personalizate) în editorul de pagini și postări, foloseam (și încă folosesc într-o oarecare măsură) categorii pentru a defini metadate personalizate pentru postări.

De exemplu, pentru a face o postare nofollow sau noindex, am creat o categorie numită nofollow și alta numită noindex și am atribuit una sau ambele categorii unei postări sau pagini.

Apoi, în fișierul meu header.php, făceam un test in_category pentru a scrie etichetele meta corespunzătoare pe pagină.

Exemplu:

<?php
if (in_category('noindex') && in_category('nofollow')){?>
<meta name="robots" content="noindex, nofollow">
<?php}?>

De asemenea, am categorii personalizate pentru lucruri precum "Dezactivează Adsense pentru această pagină", "Nu afișa atașamentele de imagini pentru această pagină", "Ascunde această pagină din meniuri", etc.

Acum că am decis să trec de la utilizarea categoriilor acolo unde ar trebui să folosesc metadate personalizate pentru postări, codul de mai sus din header.php devine...

<?php 
    if (get_post_meta( $post->ID, '_noindex', true ) && get_post_meta( $post->ID, '_nofollow', true )){?>
    <meta name="robots" content="noindex, nofollow">
<?php } ?>

Acesta este planul meu, dar acum am problema de a actualiza site-urile care folosesc vechiul mod de a defini opțiuni personalizate pentru postări prin atribuirea categoriilor.

Am nevoie de o rutină care să reassigne valorile categoriilor în valori meta personalizate pentru fiecare postare și pagină din site-ul pe care îl actualizez.

Caut niște sfaturi rapide despre cum să abordez această problemă și eventual niște indicii de cod pentru rutina necesară.

Deoarece acesta este un temă care poate fi actualizată, ca parte a procesului de actualizare, aș dori să rulez un script o singură dată, când tema este instalată pentru prima dată (sau când utilizatorul apasă pe utilitarul meu de actualizare), care să parcurgă tabelul de opțiuni și pentru fiecare instanță a unei atribuiri de categorie personalizată, să creeze atribuirea meta necesară pentru acea postare sau pagină.

De exemplu, dacă o postare aparține în prezent categoriei "Hidden", aceasta ar fi atribuită metadatelor postării "_hidden".

Sper că am explicat acest lucru suficient de bine. Apreciez orice perspectivă pe care o puteți oferi.

Poate este la fel de simplu ca o serie de instrucțiuni SQL personalizate care să ruleze pentru fiecare atribuire posibilă de categorie?

0
Toate răspunsurile la întrebare 1
4

Ideea de bază ar fi să parcurgem postările și categoriile acestora, atribuind meta date pe baza potrivirilor.

Ceva de genul acesta (asigurați-vă că testați pe o copie de test a datelor, etc., etc.):

$posts = get_posts( array(
    'numberposts' => -1
) );

foreach( $posts as $post ) {

    $categories = get_the_category( $post->ID );

    foreach( $categories as $category ) {

        if( 'Ascuns' ==  $category->name )
            add_post_meta( $post->ID, '_hidden', 'da', true );
    }

}

Am uitat să adaug ștergerea după finalizare:

$category = get_category_by_slug( 'ascuns' );
wp_delete_category( $category->term_id );
17 sept. 2010 08:58:40
Comentarii

Arată bine, Rarst. O să încerc și voi reveni cu feedback. Mulțumesc mult pentru răspunsul rapid și detaliat.

Scott B Scott B
17 sept. 2010 16:45:13

Aceasta poate să nu fie o idee bună dacă ai o bază de date foarte mare. Majoritatea site-urilor ar putea încărca toate articolele simultan, dar dacă ai mii de articole, s-ar putea să depășești timpul de execuție PHP sau altceva. WP Core face astfel de lucruri în bucăți folosind AJAX. Ar trebui să existe un plugin care face asta, dar nu găsesc unul.

jerclarke jerclarke
14 nov. 2010 01:37:32

Dacă ai eliminat cu atenție categoria din articol fără a o șterge complet, ai putea folosi un număr mic, cum ar fi 500 de articole, și să reîncarci pagina/apăsă butonul până când nu mai rămân articole în interogarea categoriei.

jerclarke jerclarke
14 nov. 2010 19:46:33

@Jeremy Clarke da, are sens. La momentul răspunsului nu am intrat în detalii mai complexe deoarece răspunsul meu inițial a fost acceptat și am concluzionat că era suficient de bun pentru Scott.

Rarst Rarst
14 nov. 2010 20:21:12