基于自定义字段添加分类术语

时间:2014-09-08 作者:Jon C

我有一个正在设置的自定义帖子类型,以便根据帖子的类型显示不同的自定义字段集。它是三个(集合、产品或变体)之一。

我已经在这方面做了所有的设置,但我认为,当设计模板以根据输入类型显示不同的数据时,如果将输入类型定义为分类法,那么可能会更容易实现。

因此,我想用与输入类型相关的相应分类法更新我的帖子。

我想到了这个,但它没有起作用。

为了澄清,我的分类法:

function set_tax_terms() {
    global $wpdb;
    $post_id = $wpdb->get_results (\'SELECT ID FROM wp_hyhg_posts WHERE post_type = uc-collections\' , object);

    foreach ($post_id as $id) {
        //get the input_type meta 
        $term= get_post_meta( $id, \'input_type\', true );
        //get the term id that matches the input type
        $term_id = term_exists( $term, \'input\' );
        //set the post term based on above results
        wp_set_post_terms( $id, $term_id, \'input\', true ); 
    }
}

set_tax_terms();
有什么想法吗?

根据另一篇帖子,我也尝试了这种方法,但没有成功。(我把这段代码放在一个代码片段插件中,这样我就可以轻松地激活和停用它。)

function set_tax_terms() {              
    $args = array(\'post_type\' =>\'uc-collections\');                
    $post_id=get_post( $args );

    if($post_id) {
        foreach ($post_id as $id) {
            //get the input_type meta 
            $term= get_post_meta( $id->ID, \'input_type\', true );
            //get the term id that matches the input type
            if(!empty($term)) {
                $term_id = term_exists( $term, \'input\' );
                //set the post term based on above results
                wp_set_post_terms( $id->ID, $term_id, \'input\', true ); 
            }
        }
    }
}

set_tax_terms();
由于某些原因,我无法将下面的代码设置为正常工作。所以我想弄清楚数据库中的事物是如何关联的。

在术语表中:我的term\\u id/所讨论项目的slug关系是:57/集合、58/产品、59/变体。

这是我在term\\u relationships表中所假设的,但事实似乎并非如此。

我看到了object\\u id和term\\u taxonomy\\u id,其中一个例子是3838/67,它对应于我为其定义了一个术语的帖子,以及term\\u taxonomy表。我看到有一个term\\u taxonomy\\u id,然后term\\u id为67/59,这将是我的变体选择。

我想我不知道为什么在这种情况下会有两个不同的数字。我不知道为什么这不管用。我想我要手动操作了。

1 个回复
SO网友:DrewAPicture

您应该能够做到以下几点:

需要注意的是:

通过使用get_term_by() 而不是term_exists(), 每次检索术语对象时,都会命中术语缓存,而不是数据库

/**
 * Set terms for the given post type based on a meta value.
 */
function wpdocs_set_terms_for_post_types() {
    $posts = get_posts( array(
        \'posts_per_page\' => -1,
        \'post_type\'      => \'uc-collections\',
    ) );

    if ( ! empty( $posts ) ) {
        foreach ( $posts as $post ) {
            if ( $meta = get_post_meta( $post->ID, \'input_type\', true ) {
                if ( is_string( $meta ) && $term = get_term_by( \'slug\', strtolower( $meta ) ) ) {
                    wp_set_post_terms( $post->ID, $term->slug, \'input\' );
                }
            }
        }
    }
}
wpdocs_set_terms_for_post_types();

结束

相关推荐

Separator for multiple terms

我试图展示自定义分类法的术语。我有这个。但是,当我有多个术语时,我的问题是如何分离我的代码:<ul class=\"slides\"> <?php $loop = new WP_Query( array( \'post_type\' => \'member\', \'posts_per_page\' => -1 ) ); ?> <?php while ( $loop->have_posts() ) : $loop->th