Как установить одинаковый url для категории таксономий и кастомного типа записей?

Привет друзья!

По ходу работы с Wordpress 4.7.3 появилась проблема, помогите пожалуйста оперативно её устарнить...
Суть проблемы в следующем:
Имеется у меня на сайте страница портфолио которую я создал при помощи кастомных типов записей и категории к этой записи созданные через таксономию.

081f43fe788743ccbdfa2faf33a4a8a8.png

при выводе на сайте категорий получаю следующий результат в ссылке
559d84468f8542f98f41e7a9f2269288.png
sitename/name_taxonomy/categories/
sitename/typework/all/
Вывожу категории таксономии как навигацию

При входе в саму запись портфолио получаю ссылку уже нужного мне вида:
sitename/custom_post_type/post_name/
sitename/portfolio/salon-krasoty-maestro/

Как сделать так чтобы url страницы со всеми работами в портфолио вместо такого
sitename/typework/all/
принял вид такого sitename/portfolio/all/

Привожу свой код:

Регистрация кастомного типа записей и таксономии к нему:
add_action( 'init', 'add_custom_pages' );
function add_custom_pages() {
register_post_type( <b>'portfolio</b>',
    array(
      'labels' => array(
        'name' => __( 'Портфолио' ),
        'singular_name' => __( 'Портфолио' ),
        'add_new' => __( 'Добавить работу' ),
        'add_new_item' => __( 'Добавить работу' ),
        ),
      'public' => true,
      'menu_position' => 21,
      'hierarchical' => true,
      'menu_icon' => 'dashicons-screenoptions',
      'supports' => array('title', 'editor', 'thumbnail', /*'comments',*/ 'page-attributes' )
    )
  );
  
  register_taxonomy("<b>typework</b>", array("<b>portfolio</b>"), array(
    "hierarchical" => false,
    "label" => "Вид работы",
    "singular_label" => "Вид работы",
    "rewrite" => true
    )
  );
}


Вывод в шаблоне (taxonomy-typework.php):
<?php get_header(); 

 // список разделов стандартной таксономии (category,archive...) для блога (рубрики записей)
$list_category = array(
  'orderby'      => 'id',
  'order'        => 'DESC',
  'title_li'     => '',
  'hide_empty'   => '1',
  'taxonomy'     => 'typework',
);
?>
<!-- taxonomy-typework.php -->
    <section>
      <div class="breadcrumbs">
        <div class="container">
          <div class="row">
            <div class="col-xs-12 text-left">
            <?php if (function_exists('it4u_breadcrumbs')) it4u_breadcrumbs(); ?>
            </div>
          </div>
        </div>
      </div>
    </section>
    <section class="portfolio-list well7">
      <div class="container">
        <div class="row">
          <div class="col-sm-10">
            <h1>Портфолио</h1>
						<?php //the_terms( $post->ID, 'portfolio' , ' ' ); ?>
          </div>
          <div class="col-sm-2">
            <a class="customUrl" href="<?php the_permalink( 129 ); ?>"><h3>Клиенты</h3></a>
          </div>
        </div>
        <div class="row">
          <div class="col-md-3 custom-sidebar-left">
            <div class="portfolio-menu">
              <ul>
                  <?php wp_list_categories( $list_category ); ?>
              </ul>
            </div>
            <div class="portfolio-last-post">
              <h3>Новые работы</h3>
                <?php
                  include( 'lastworks.php' );
                ?>
            </div>
          </div>
          
          <div class="col-md-9 portfolio-list">
            <div class="row">
           <?php if (have_posts()): ?>
            <?php while (have_posts()): the_post(); ?>
              <div class="col-sm-6 col-md-4 col-lg-4 work-block">
                <a title="<?php the_title(); ?>" href="<?php the_permalink(); ?>">
                  <img class="img-responsive" src="<?php the_post_thumbnail_url('portfolio') ?>" alt='<?php the_title(); ?>'>
                </a>
                <div class="sample-title">
                  <h4><?php the_field('portfolio_type'); ?></h4>
                  <a title="<?php the_title(); ?>" href="<?php the_permalink(); ?>"><p><?php the_title(); ?></p></a>
                </div>
              </div>
              <?php endwhile; ?>
              <?php wp_reset_postdata(); ?> 
              <?php else : ?>
              <div class="text-center blog-post">
                  <h2>Записей не найдено</h2>
                    <p><?php _e("Извините, но в этой категории поке еще нет записей."); ?></p>
              </div>
            <?php endif; ?>
          </div>
          <div class="row">
            <div class="custom-pagination tc">
              <?php echo paginate_links('');  ?>
            </div>
          </div>
         </div>
        </div>
      </div>
    </section>
<?php get_footer(); ?>


В итоге работы данного кода получаю:
- ссылку на все работы (категория all): sitename/typework/all/
- ссылку на категорию (категория лендинг): sitename/typework/lending/
- ссылку на саму страницу работы: sitename/portfolio/salon-krasoty-maestro/

а нужно:

- ссылку на все работы (категория all):sitename/ portfolio/all/
- ссылку на категорию (категория лендинг): sitename/portfolio/lending/
- ссылку на саму страницу работы: sitename/ portfolio/salon-krasoty-maestro/

Заранее ОГРОМНОЕ СПАСИБО всем кто пытался помочь в решении данной проблемы.....
  • Вопрос задан
  • 1252 просмотра
Пригласить эксперта
Ответы на вопрос 2
mr-volevach
@mr-volevach
web-developer
Если я правильно понял что нужно сделать. То можно попробовать так.

Сначала регистрируем таксономию
register_taxonomy(
    'type_work',
    'portfolio',
    array(
        'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false )
    )
);


Потом кастомный тип
register_post_type(
    'portfolio',
    array(
        'rewrite' => array( 'slug' => 'portfolio/%type_work%', 'with_front' => false ),
        'has_archive' => 'portfolio'
    )
);


и потом добавляем фильтр, который переформирует урл
function wpa_portfolio_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'portfolio' ){
        $terms = wp_get_object_terms( $post->ID, 'type_work' );
        if( $terms ){
            return str_replace( '%type_work%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_portfolio_permalinks', 1, 2 );


Надеюсь поможет.
Ответ написан
VasyaPertrov
@VasyaPertrov
Изготовление и безопастность сайтов. WP и др.
Два одинаковых слага ВП не допустит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы