web-dev-qa-db-ja.com

一期二分類のですか?

誰もがこれのために解決策を得ました...

私は、カスタムカテゴリとして機能する2つの独自の分類法があるアプリを作成しています。だから私はcat1とcat2の分類法を持っています。

私がやりたいことは、cat1からcat2への子と一緒に、用語をコピーすることです。たぶん何かのような:

set_term_taxonomy($term_id, array("cat1, "cat2"));

子と一緒に、同じ用語が複数の分類に含まれる可能性がある場合。 2つの分類法があるのは、それらが2つの異なる店舗在庫であるためです。

1
Daithí

それを行うためのメソッドを書く必要がありました。これがその方法です。

構文:

copy_terms($term->term_id, "taxonomy1", "taxonomy2", 0); //will copy to root of destination



 /**
 * Copy a term and its descendants from one taxonomy to another.
 * Both taxonomies have to be hierarchical. Will copy across 
 * posts as well.
 *
 * @param int $term the term id to copy
 * @param string $from the taxonomy of the original term
 * @param string $to the destination for the taxonomy
 * @param int $parent the parent term_id to add the taxonomy to
 * @return type true|WP_Error
 */
function copy_terms($term, $from, $to, $parent=0) {

    //check for child terms      
    $term = get_term($term, $from);
    $child_terms = get_terms($from, array(
        'hide_empty' => false,
        'parent' => $term->term_id
            ));

    //check for child products
    $child_prods = new WP_Query(array(
            'tax_query' => array(
                array(
                    'taxonomy' => $from,
                    'terms' => $term->term_id
                )
            )
        ));

    //work out new slug
    if($parent==0) $slug = $to."-".sanitize_title($term->name);
    else{
        $parent_term = get_term($parent, $to);
        $slug = $parent_term->slug."-".sanitize_title($term->name);
    }

    //add term to new taxonomy
    $parent = wp_insert_term($term->name, $to, array(
        'description' => $term->description,
        'parent' => $parent,
        'slug' => $slug
            ));

    if(is_wp_error($parent)) return $parent;
    $parent = get_term($parent['term_id'], $to);        
    if(is_wp_error($parent)) return $parent;

    //loop through folders first
    foreach($child_terms as $child){
        copy_terms($child->term_id, $from, $to, $parent->term_id);
    }

    //loop through products
    foreach($child_prods->posts as $child){
        wp_set_post_terms($child->ID, $parent->term_id, $to, true);
    }
    return true;
1
Daithí