Пользовательские термины таксономии в слаге пользовательского типа записи

У нас есть следующая договоренность о жилищном веб-сайте, на котором есть участки (также известные как дома), которые сгруппированы в застройки.

Итак, фактическая структура может выглядеть так

  • ВЕТРЕНЫЕ ХОЛМЫ

    • 1 Sunnydale Road
    • 2 Саннидейл Роуд
    • 10 Саннидейл Роуд
  • ВНЕЗАПНАЯ ДОЛИНА

    • 1 Sudden Valley
    • 2 Внезапная долина

Слизень, который я хотел бы для этих страниц, был бы:

www.website.com/sudden-valley

www.website.com/sudden-valley/1-sudden-valley

Я пробовал несколько подходов к этому. Я думаю, что пользовательский тип поста «сюжеты» с таксономией «развития» будет работать лучше всего. Однако я не могу понять, как получить термин таксономии в URL-адресе. Я всегда получаю что-то вроде www.website.com/developments/sudden-valley.

Помимо слагов, я довольно хорошо разбираюсь в настраиваемых типах/таксономиях сообщений, поэтому рад попробовать что-либо предложенное — считайте это чистым листом. Любая помощь высоко ценится.


person mike_freegan    schedule 01.08.2017    source источник


Ответы (1)


Создание постоянной ссылки для термина таксономии

Параметры

$term (object|int|string) (Обязательно) Объект термина, идентификатор или ярлык, ссылка на который будет извлечена.

$taxonomy (строка) (необязательно) Таксономия. Значение по умолчанию: ''

Источник # Файл: wp-includes/taxonomy.php

function get_term_link( $term, $taxonomy = '' ) {
    global $wp_rewrite;
 
    if ( !is_object($term) ) {
        if ( is_int( $term ) ) {
            $term = get_term( $term, $taxonomy );
        } else {
            $term = get_term_by( 'slug', $term, $taxonomy );
        }
    }
 
    if ( !is_object($term) )
        $term = new WP_Error('invalid_term', __('Empty Term'));
 
    if ( is_wp_error( $term ) )
        return $term;
 
    $taxonomy = $term->taxonomy;
 
    $termlink = $wp_rewrite->get_extra_permastruct($taxonomy);
 
    $slug = $term->slug;
    $t = get_taxonomy($taxonomy);
 
    if ( empty($termlink) ) {
        if ( 'category' == $taxonomy )
            $termlink = '?cat=' . $term->term_id;
        elseif ( $t->query_var )
            $termlink = "?$t->query_var=$slug";
        else
            $termlink = "?taxonomy=$taxonomy&term=$slug";
        $termlink = home_url($termlink);
    } else {
        if ( $t->rewrite['hierarchical'] ) {
            $hierarchical_slugs = array();
            $ancestors = get_ancestors( $term->term_id, $taxonomy, 'taxonomy' );
            foreach ( (array)$ancestors as $ancestor ) {
                $ancestor_term = get_term($ancestor, $taxonomy);
                $hierarchical_slugs[] = $ancestor_term->slug;
            }
            $hierarchical_slugs = array_reverse($hierarchical_slugs);
            $hierarchical_slugs[] = $slug;
            $termlink = str_replace("%$taxonomy%", implode('/', $hierarchical_slugs), $termlink);
        } else {
            $termlink = str_replace("%$taxonomy%", $slug, $termlink);
        }
        $termlink = home_url( user_trailingslashit($termlink, 'category') );
    }
    // Back Compat filters.
    if ( 'post_tag' == $taxonomy ) {
 
        /**
         * Filters the tag link.
         *
         * @since 2.3.0
         * @deprecated 2.5.0 Use 'term_link' instead.
         *
         * @param string $termlink Tag link URL.
         * @param int    $term_id  Term ID.
         */
        $termlink = apply_filters( 'tag_link', $termlink, $term->term_id );
    } elseif ( 'category' == $taxonomy ) {
 
        /**
         * Filters the category link.
         *
         * @since 1.5.0
         * @deprecated 2.5.0 Use 'term_link' instead.
         *
         * @param string $termlink Category link URL.
         * @param int    $term_id  Term ID.
         */
        $termlink = apply_filters( 'category_link', $termlink, $term->term_id );
    }
 
    /**
     * Filters the term link.
     *
     * @since 2.5.0
     *
     * @param string $termlink Term link URL.
     * @param object $term     Term object.
     * @param string $taxonomy Taxonomy slug.
     */
    return apply_filters( 'term_link', $termlink, $term, $taxonomy );
}

Существуют также плагины, такие как Постоянные ссылки настраиваемого типа записей, которые могут сделать это за вас.

person Mustafa Khan    schedule 02.08.2017