WordPress post tag & custom field

26 sept. 2011, 15:10:22
Vizualizări: 3.24K
Voturi: 1

Am un site în WordPress unde am folosit câmpuri personalizate, dar acum doresc să folosesc acel câmp personalizat ca tag pentru postare automat.

Are cineva vreo idee?

Mulțumesc.

0
Toate răspunsurile la întrebare 3
1

Pentru a converti câmpurile personalizate vechi, poți scrie un plugin care, la activare, preia toate articolele cu numele câmpului tău personalizat și le convertește în etichete folosind funcția utilă wp_set_post_terms.

Mai întâi, definește câteva constante cu numele câmpurilor și tipul de postare.

<?php
/**
 * SCHIMBĂ ACESTA! care este numele câmpului tău personalizat?
 */
define( 'WPSE29498_FIELD', 'nume_camp_personalizat' );


/**
 * SCHIMBĂ ACESTA! ce tip de postare?
 */
define( 'WPSE29498_TYPE', 'post' );

Apoi, funcția pentru hook-ul de activare:

<?php
register_activation_hook( __FILE__, 'wpse29498_field_to_tag' );
function wpse29498_field_to_tag()
{
    $posts = get_posts(
        array(
            'post_type'     => WPSE29498_TYPE,
            'post_status'   => array( 'publish', 'draft', 'pending', 'future' ),
            'numberposts'   => -1,
            'meta_key'      => WPSE29498_FIELD
        )
    );

    if( empty( $posts ) ) return;

    foreach( $posts as $p )
    {
        if( $meta = get_post_meta( $p->ID, WPSE29498_FIELD, true ) )
        {
            wp_set_post_terms( $p->ID, $meta, 'post_tag', true );
        }
    }
}

Și în final, poți folosi hook-ul save_post pentru a verifica dacă valoarea câmpului personalizat este prezentă. Dacă da, asigură-te că nu este deja o etichetă, apoi adaug-o dacă nu este.

Nu sunt sigur dacă este ceva de care ai nevoie sau o conversie unică.

<?php
add_action( 'save_post', 'wpse29498_save_post' );
function wpse29498_save_post( $post_id )
{
    if( $meta = get_post_meta( $post_id, WPSE29498_FIELD, true ) )
    {
        // obține etichetele curente ale postării
        $terms = wp_get_object_terms( $p->ID, 'post_tag', 'name' );

        // dacă eticheta noastră este deja acolo, ieși
        if( in_array( $meta, $terms ) ) return;

        // adaugă eticheta dacă nu există
        wp_set_post_terms( $post_id, $meta, 'post_tag', true );
    }
}

Ca plugin.

2 dec. 2011 22:00:44
Comentarii

Te rog, este dificil să-ți imaginezi același lucru pentru conversia într-o categorie în loc de o etichetă?

jjj jjj
9 iun. 2015 22:55:51
0

Din câte știu, acest lucru nu este posibil să fie făcut automat „din cutie”. O scurtă căutare pe Google și se pare că în prezent nu există plugin-uri care să facă acest lucru pentru tine.

Totuși, nu văd niciun motiv pentru care nu ar putea fi scris un plugin care să facă acest lucru. Va trebui să folosești hook-ul „save_post”, care va rula de fiecare dată când un articol este salvat/actualizat, să verifici câmpul personalizat și să îl aplici ca etichetă.

Documentația pentru acest hook specific este limitată, dar este menționat aici:

http://codex.wordpress.org/Plugin_API/Action_Reference

26 sept. 2011 15:29:42
1

Am întâlnit o întrebare similară acum ceva timp de la cineva care întreba cum să adauge automat cuvinte cheie din plugin-ul All-in-one SEO ca etichete ale articolului (http://www.vidalquevedo.com/how-to-add-tags/#li-comment-62)

După ce am văzut întrebarea ta, am luat acel script pe care l-am scris și l-am modificat pentru a adăuga automat și valorile câmpurilor personalizate ca etichete ale articolului.

Iată linkul către script și articol: http://www.vidalquevedo.com/wordpress-how-to-automatically-convert-custom-fields-to-post-tags/

Mulțumesc și te rog să-mi spui dacă te-a ajutat!

Vq.

26 sept. 2011 20:00:14
Comentarii

Cred că soluția ta este să adaugi cuvintele cheie 'All in one seo' ca etichete, cum am citit pe vidalquevedo.com/how-to-add-tags#comment-123 Eu nu folosesc All in one SEO, ci doar inserez câmpuri personalizate în postări și vreau ca acestea să fie etichetele pentru acea postare.

shah parthvi shah parthvi
1 dec. 2011 10:31:53