N
N
nanny_ogg2018-10-25 09:56:54
CMS
nanny_ogg, 2018-10-25 09:56:54

Arbitrary url in wp?

I changed the url according to the tutorial from here https://misha.blog/wordpress/taksonomii-v-url-tipo...
Now my url looks like site.ru/record-type-name/first-in-the-list-name- taxonomy-term/product-name
Now I need the url to be like site.ru/post-type-name/taxonomy-term-name/tag-names-related-to-product/product-name
Add new code with tags

function true_post_type_permalink( $permalink, $post_id, $leavename ) {

  $post_type_name = 'products'; // название типа записи, вы можете найти его в админке или в функции register_post_type()
  $post_type_slug = 'products'; // часть URL товаров, не всегда совпадает с названием типа записи!
  $tax_name = 'catalog'; // ну это понятно, название таксономии - категории товаров

  $post = get_post( $post_id ); // получаем объект поста по его ID

  if ( strpos( $permalink, $post_type_slug ) === FALSE || $post->post_type != $post_type_name ) // не делаем никаких изменений, если тип записи не соответствует или если URL не содержит ярлык tovar
    return $permalink;

        $termini = wp_get_object_terms( $post->ID, $tax_name ); // получаем все категории, к которым принадлежит данный товар
        
        //новый код, получает все тэги, записывает в строку
        $tags = get_the_tags( $post_id );
        $tag_string = '';
        $count_tags = 0;
        foreach ($tags as $key => $tag) {
          $count_tags++;
          if ($tag->count == $count_tags-1) {
            $tag_string .= $tag->slug;
          } else{
            $tag_string .= $tag->slug.'/';
          }
        }


        if ( !is_wp_error( $termini ) && !empty( $termini ) && is_object( $termini[0] ) )
          $permalink = str_replace( $post_type_slug, $post_type_slug.'/'.$termini[0]->slug.'/'.$tag_string, $permalink );  //новый код, дописывает к url существующие тэги 

  return $permalink;
}

add_filter('request', 'true_post_type_request', 1, 1 );

function true_post_type_request( $query ){
  global $wpdb; // нам немного придётся поработать с БД

  $post_type_name = 'products'; // указываем тут название типа записей товара
  $tax_name = 'catalog'; // а также название таксономии - категории товаров

  $yarlik = $query['attachment']; // после того, как мы изменили ссылки товаров в предыдущей функции, WordPress начал принимать их за страницы вложений

  // а теперь давайте получим ID товара, ярлык которого соответствует запросу на странице
  $post_id = $wpdb->get_var(
    "
    SELECT ID
    FROM $wpdb->posts
    WHERE post_name = '$yarlik'
    AND post_type = '$post_type_name'
    "
  );

  $termini = wp_get_object_terms( $post_id, $tax_name ); // товар должен находиться в категории (одной или нескольких)


  if( isset( $yarlik ) && $post_id && !is_wp_error( $termini ) && !empty( $termini ) ) : // изменяем запрос, если всё ок

    unset( $query['attachment'] );
    $query[$post_type_name] = $yarlik;
    $query['post_type'] = $post_type_name;
    $query['name'] = $yarlik;

  endif;

  return $query; // возвращаем результат
}

But with the addition of tags to the url, a 404 page is obtained, it also turns out if you add not one term there, but all. How can this be resolved?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question