如何在选择两个分类项的情况下分配要在url中显示的默认/优先级分类

时间:2019-06-17 作者:Bacorrito

我有一个使用CPT UI插件创建的自定义分类法(例如taxonomyfoo),并将该分类法分配给了标准wp帖子。

我还使用以下代码在url中添加了分类法段塞(%taxonomyfoo%/%post title%/):

add_filter(\'post_link\', \'taxonomyfoo_permalink\', 10, 3);
add_filter(\'post_type_link\', \'taxonomyfoo\', 10, 3);

function taxonomyfoo_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, \'%taxonomyfoo%\') === FALSE) return $permalink;

        // Get post
        $post = get_post($post_id);
        if (!$post) return $permalink;

        // Get taxonomy terms
        $terms = wp_get_object_terms($post->ID, \'taxonomyfoo\');   
        if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug;
        else $taxonomy_slug = \'taxonomy_z\';

    return str_replace(\'%taxonomyfoo%\', $taxonomy_slug, $permalink);
}   
如果我在taxonomyfoo下只有两个项目(taxonomy\\u z和taxonomy\\u a),并且知道wp中的分类顺序是按字母顺序的,那么如果我为一篇文章同时选择taxonomy\\u z和taxonomy\\u a,它将自动在url中使用taxonomy\\u a(例如.com/taxonomy\\u a/post title/)。

如果选择了所有分类法,是否有办法使taxonomy\\u z成为默认/优先级url slug?因为在一些帖子中,我有两种情况都需要选择,但其中一种情况比另一种情况更优先显示url。

非常感谢!

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

我正在寻找的解决方案是,如果某个特定的分类法项目与其他分类法项目勾选,则将其作为默认/优先级

你真的在找这样的东西吗:

$default_slug = \'taxonomy_z\'; // slug of the default term
if ( ! is_wp_error( $terms ) && ! empty( $terms ) ) {
    $list = wp_list_filter( $terms, array( \'slug\' => $default_slug ) );
    if ( ! empty( $list ) ) { // the post **is** in the default term
        // If two or more terms assigned to the post, use the default term\'s slug.
        $taxonomy_slug = ( count( $terms ) > 1 ) ? $default_slug : $terms[0]->slug;
    } else { // the post is **not** in the default term
        $taxonomy_slug = $terms[0]->slug;
    }
} else { // the post is not in any of the taxonomy\'s terms; use the default term.
    $taxonomy_slug = $default_slug;
}
将在代码中替换此部分:

if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug;
else $taxonomy_slug = \'taxonomy_z\';

更新

如果分类法“nashville”成为父分类法,而其邻域“hillsboro”和“greenhills”成为其子分类法,是否也有办法将“nashville”作为其默认url slug?

是的,通过将父项(其slug)存储在数组中($default_slugs 在下面的示例中)。然而,这意味着您的帖子不应该有两个父项,它们位于该数组中。一、 e.可以在tennesseenashville, 但不是两者都有。因为否则,permalink slug可能不是您所期望的那样。

$default_slugs = array( \'tennessee\', \'nashville\' ); // list of parent terms/slugs
if ( ! is_wp_error( $terms ) && ! empty( $terms ) ) {
    $slugs = wp_list_pluck( $terms, \'slug\' );
    $list = array_intersect( $slugs, $default_slugs );
    if ( ! empty( $list ) ) { // the post **is** in a parent term
        // If two or more terms assigned to the post, use a parent term\'s slug.
        $default_slug = array_shift( $list );
        $taxonomy_slug = ( count( $terms ) > 1 ) ? $default_slug : $terms[0]->slug;
    } else { // the post is **not** in a parent term
        $taxonomy_slug = $terms[0]->slug;
    }
} else { // the post is not in any of the taxonomy\'s terms; use a default term.
    $taxonomy_slug = \'tennessee\';
}

相关推荐

Make taxonomy query dynamic

我对多个页面使用相同的页面模板。-> page-base.php在使用此模板的每个页面上,我想显示使用CPT.我的问题是,如何使数组动态化,以自动更改“分类法”?这是我当前的代码<?php $terms = get_terms( array( \'taxonomy\' => \'catmaison\', \'hide_empty\' => false,