Вопрос или проблема
Я кодирую номер 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. Убедитесь, что вы очистили кэш на вашем сайте и, возможно, в браузере, чтобы изменения вступили в силу. Если у вас есть дальнейшие вопросы или возникли ошибки, не стесняйтесь спрашивать!