为一个帖子设置两个术语,当它们只有一个口音不同时

时间:2022-02-10 作者:Iurie

我面临以下情况:在手动添加(在后端)带有名称的术语(不是slug)后MânieManie, 这只在重音/变音符号(它们是完全不同的单词,含义完全不同)和非层次自定义分类法(标记)上有所不同,无论设置了什么样的slug(我尝试了slug对minie/maniemanie/manie-2 对于该术语名称),当我尝试将这些术语设置为帖子时,也可以从后端设置,当我保存帖子时,Wordpress只随机接受其中一个术语。

总而言之,这些术语是(可以)创建/添加到分类中的,但不能一起添加到帖子中,其中一个在保存帖子时被随机排除。

我怎样才能解决这个问题?到目前为止,我还没有找到任何有用的信息。非层次自定义分类法是由代码添加的,但我认为这不是问题的原因。

1 个回复
最合适的回答,由SO网友:Iurie 整理而成

因此,WordPress不允许为一篇文章设置两个术语(在分类法中已经存在或是新的,没有区别),如果它们只存在一个重音/变音标记,则在后端编辑(编辑或快速编辑)时,会随机拒绝其中一个。经过几次测试,我发现这些术语仍然可以使用挂钩/过滤器添加到帖子中-save_post()save_post_{$post->post_type}. 然而,这里也有一个问题:如果钩子被禁用,WordPress将在下次保存/更新帖子时随机删除这两个术语中的一个,因此我在这种情况下看到的唯一解决方案是在每次保存/更新帖子之前将有问题的术语添加到帖子中。考虑到邮政储蓄不是经常进行,这并不是一个很大的不便。

这是代码(我选择使用save_post_{$post->post_type} 挂钩):

add_action( \'save_post_your_post_type_slug\', function( $post_id ) {
    $taxonomy = \'custom_taxonomy_slug\';

    // terms to add; I mention that they were added earlier to the custom
    // taxonomy and the taxonomy may contain other terms for other posts
    $new_terms = array( \'Mânie\', \'Manie\' );

    // get existing taxonomy terms as an array with their IDs and names
    $tax_terms = get_terms( array( \'taxonomy\' => $taxonomy, 
        \'fields\' => \'id=>name\', \'hide_empty\' => false ) );

    if( ! is_null( $tax_terms ) && ! empty( $tax_terms ) ) {
        // check if the new terms exist in the custom taxonomy
        $common_terms = array_intersect( $tax_terms, $new_terms );
        if( ! is_null( $common_terms) && ! empty( $common_terms) ) {
            // get IDs of new post terms
            $terms_ids = array_keys( $common_terms );
            // set new post terms
            wp_set_post_terms( $post_id, $terms_ids, $taxonomy );
        }
    }
} );

相关推荐

ACF Taxonomy in Loop

你好吗我的问题是,我在头版上显示了一些卡片,例如名称和描述,这些信息来自我的分类法event,因为我用ACF创建了一些字段,我想在卡片中打印它们,但我不知道怎么做。下面是我如何打印卡片的代码 <?php if(is_front_page()): $terms = get_terms( [ \'taxonomy\' => \'evento\', \'hide_empty\' =>