Я добавил SKU в постоянные ссылки WooCommerce, но у меня есть небольшая проблема.

Вопрос или проблема

Я кодирую номер 1 в functions.php и номер 2 в .htaccess, чтобы получить постоянную ссылку на продукт на основе SKU.

Что-то вроде этого: xyz.com/product-title/#sku
Как я мог бы убрать “#” из постоянной ссылки (перед SKU)?

Когда я убираю его вручную из кода номер 1, не меняя код номер 2, ссылки становятся правильными, но ведут на страницу 404.

Также, что мне делать, если я хочу изменить свои URL на что-то вроде это: xyz.com/sku/product-title/?

Код 1

"function jpb_custom_meta_permalink( $link, $post ){
$post_meta = get_post_meta( $post->ID, '<вставьте здесь ваш ключ метаданных>', true );
if( empty( $post_meta ) || !is_string( $post_meta ) )
   $post_meta="<вставьте здесь ваше значение по умолчанию (может быть пустой строкой)>";
$link = str_replace( '!!custom_field_placeholder!!', $post_meta, $link );
return $link;}
add_filter( 'post_link', 'jpb_custom_meta_permalink', 10, 2 );
function append_sku_string( $link, $post ) {
$post_meta = get_post_meta( $post->ID, '_sku', true );
     if ( 'product' == get_post_type( $post ) ) {
       $link = $link . '#' .$post_meta;
       return $link;}
}
add_filter( 'post_type_link', 'append_sku_string', 1, 2 );"

Код 2

"<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase / 

    RewriteRule ^whisky/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ ?sku=$1&product=$2 [NC,L]
    </IfModule>"

Ответ или решение

Привет! Давайте разберем ваш вопрос по порядку и предложим решение для вашей проблемы с изменением постоянных ссылок на продукты в WooCommerce, основанных на SKU.

Удаление символа "#" из постоянной ссылки

Чтобы удалить символ "#" перед SKU из постоянной ссылки и избежать получения 404-страниц, вам нужно изменить код в functions.php, а также в файле .htaccess.

Изменение кода в functions.php

Ваш текущий код добавляет SKU с символом "#". Давайте уберем этот символ:

function jpb_custom_meta_permalink( $link, $post ){
    $post_meta = get_post_meta( $post->ID, '<insert your meta key here>', true );
    if( empty( $post_meta ) || !is_string( $post_meta ) )
        $post_meta = '<insert your default value (could be an empty string) here>';
    $link = str_replace( '!!custom_field_placeholder!!', $post_meta, $link );
    return $link;
}
add_filter( 'post_link', 'jpb_custom_meta_permalink', 10, 2 );

function append_sku_string( $link, $post ) {
    $post_meta = get_post_meta( $post->ID, '_sku', true );
    if ( 'product' == get_post_type( $post ) && !empty($post_meta) ) {
        $link = $link . $post_meta; // Убираем символ "#"
        return $link;
    }
    return $link;
}
add_filter( 'post_type_link', 'append_sku_string', 1, 2 );

Обратите внимание, что SKU добавляется без символа "#".

Изменение файла .htaccess

Теперь вам нужно обновить правила в файле .htaccess, чтобы правильно обрабатывать новые ссылки. Ваши правила могут выглядеть следующим образом:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^whisky/([A-Za-z0-9-_]+)/?$ index.php?sku=$1 [NC,L]
    RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?sku=$1&product=$2 [NC,L]
</IfModule>

Изменение URL на "xyz.com/sku/product-title/"

Если вы хотите изменить ссылки так, чтобы они выглядели как xyz.com/sku/product-title/, вам нужно будет немного изменить код. Вот как это можно сделать.

Изменение в functions.php

function custom_sku_product_link( $link, $post ) {
    $sku = get_post_meta( $post->ID, '_sku', true );
    if ( 'product' == get_post_type( $post ) && !empty($sku) ) {
        // Изменяем формат ссылки
        $link = home_url() . '/' . $sku . '/' . $post->post_name . '/';
    }
    return $link;
}
add_filter( 'post_type_link', 'custom_sku_product_link', 10, 2 );

Изменение в .htaccess

Напоследок, вам нужно будет убедиться, что ваш файл .htaccess правильно перенаправляет эти новые ссылки:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?sku=$1&product=$2 [NC,L]
</IfModule>

Это правило теперь будет воспринимать SKU как первый параметр перед названием продукта.

Заключение

Теперь ваши постоянные ссылки на продукты должны выглядеть как xyz.com/sku/product-title/, без символа "#" перед SKU. Убедитесь, что вы очистили кэш на вашем сайте и, возможно, в браузере, чтобы изменения вступили в силу. Если у вас есть дальнейшие вопросы или возникли ошибки, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...