Поддержка WooCommerce Изменение url

  • Здравствуйте
    мне нужно
    1) убрать из url /product-category/ и /product/
    2) поставить в конец .html

    есть код к 1 и 2

    По отдельности все работает как нужно. А вот вместе — ошибка 404… т.е. ссылка открывается в нужном формате, но страницы по этому адресу нет (она без .html на конце)
    Как бы все это совместить?

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • вот этот код убирает /product-category/ и /product/

    
    add_filter( 'request', 'change_requerst_vars_for_product_cat' );
    add_filter( 'term_link', 'term_link_filter', 10, 3 );
    add_filter( 'post_type_link', 'wpp_remove_slug', 10, 3 );
    add_action( 'pre_get_posts', 'wpp_change_request' );
    
    function change_requerst_vars_for_product_cat($vars) {
    
        global $wpdb;
        if ( ! empty( $vars[ 'pagename' ] ) || ! empty( $vars[ 'category_name' ] ) || ! empty( $vars[ 'name' ] ) || ! empty( $vars[ 'attachment' ] ) ) {
          $slug   = ! empty( $vars[ 'pagename' ] ) ? $vars[ 'pagename' ] : ( ! empty( $vars[ 'name' ] ) ? $vars[ 'name' ] : ( ! empty( $vars[ 'category_name' ] ) ? $vars[ 'category_name' ] : $vars[ 'attachment' ] ) );
          $exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s", array( $slug ) ) );
          if ( $exists ) {
            $old_vars = $vars;
            $vars     = array( 'product_cat' => $slug );
            if ( ! empty( $old_vars[ 'paged' ] ) || ! empty( $old_vars[ 'page' ] ) ) {
              $vars[ 'paged' ] = ! empty( $old_vars[ 'paged' ] ) ? $old_vars[ 'paged' ] : $old_vars[ 'page' ];
            }
            if ( ! empty( $old_vars[ 'orderby' ] ) ) {
              $vars[ 'orderby' ] = $old_vars[ 'orderby' ];
            }
            if ( ! empty( $old_vars[ 'order' ] ) ) {
              $vars[ 'order' ] = $old_vars[ 'order' ];
            }
          }
        }
    
        return $vars;
    
      }
      
    function term_link_filter( $url, $term, $taxonomy ) {
    
        $url = str_replace( "/product-category/", "/", $url );
        return $url;
    
      }
    
    function wpp_remove_slug( $post_link, $post, $name ) {
    
        if ( 'product' != $post->post_type || 'publish' != $post->post_status ) {
          return $post_link;
        }
        $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
    
        return $post_link;
    
      }
    
    function wpp_change_request( $query ) {
    
        if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[ 'page' ] ) ) {
          return;
        }
        if ( ! empty( $query->query[ 'name' ] ) ) {
          $query->set( 'post_type', array( 'post', 'product', 'page' ) );
        }
    
    }
    

    А вот этот добавляет .html

    
    function wpse_178112_permastruct_html( $post_type, $args ) {
        if ( $post_type === 'product' )
            add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%.html", $args->rewrite );
    }
     
    add_action( 'registered_post_type', 'wpse_178112_permastruct_html', 10, 2 );
    
    function wpse_178112_category_permastruct_html( $taxonomy, $object_type, $args ) {
        if ( $taxonomy === 'product_cat' )
            add_permastruct( $taxonomy, "{$args['rewrite']['slug']}/%$taxonomy%.html", $args['rewrite'] );
    }
     
    add_action( 'registered_taxonomy', 'wpse_178112_category_permastruct_html', 10, 3 );
    

    но одновременно они не работают….

    Можно попробовать через .htaccess, но я не подскажу точно какие нужны правила, чтобы прилепить хвост только к записям. Поищите сами
    https://stackoverflow.com/questions/5745490/rewrite-rule-to-add-html-extension

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    поставить в конец .html

    Это что-то из баек прошлого века, сейчас гораздо большее значение имеют быстродействие, правильная навигация, корректная структура страниц и удобство работы с сайтом.

    The discussion whether or not you should forcibly add .html (or any other extension) can be ended very quickly: Don’t do it.

    The perfect WordPress SEO permalink structure [yoast.com]

    да я понимаю, клиент хочет сохранить ссылки как на старом сайте…

    клиент хочет сохранить ссылки как на старом сайте…

    Если вы делаете редизайн старого сайта или переносите с другой cms, то логичнее наоборот внести в .htaccess редирект со старых ссылок на новые и избавиться от хвоста. Вскоре новые ссылки переиндексируются, сайт не потеряет позиции

    спасибо, поставила перенаправление

Просмотр 8 ответов — с 1 по 8 (всего 8)