Пользовательский ярлык продукта Woocommerce

Есть ли способ создать собственный URL-адрес продукта на основе атрибутов продукта, у меня есть солнцезащитные очки продукта, к которым привязаны несколько атрибутов: металлический, синий и круглый, поэтому текущий URL-адрес:

website.com/glasses/sunglasses/abram-widana-629/

Я пытаюсь получить URL-адрес, в который включены эти атрибуты:

website.com/glasses/sunglasses/abram-widana-meta-blue-round-629/

Я был бы очень признателен, если бы кто-нибудь просто указал мне правильное направление, как решить эту проблему.

Это может быть полезно: docs.woocommerce.com/document/постоянные ссылки . (сам не пробовал). Возможно, вы могли бы использовать раздел «Постоянные ссылки таксономии» с «База атрибутов продукта».

Kalti 26.07.2019 10:12

База атрибутов продукта, похоже, работает как категория, она показывает все продукты, содержащие выбранный атрибут, но когда вы нажимаете на фактический продукт, атрибуты не остаются в фактическом URL-адресе самого продукта :(

jjwebdev 26.07.2019 10:29
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
2
2
3 755
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть два способа сделать это: вручную или программно.


Ручная настройка постоянных ссылок:

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

После того, как продукт был добавлен/сохранен, вы увидите постоянную ссылку, отображаемую непосредственно под полем заголовка, например:

Просто нажмите кнопку Редактировать рядом с ним и измените его с abram-widana-629 на abram-widana-meta-blue-round-629.


Программное добавление атрибутов к постоянным ссылкам:

Если вы хотите добиться этого на постоянной основе для всех продуктов, вам придется работать с фильтром/хуком «save_post», чтобы добавить все атрибуты в постоянную ссылку. Единственным недостатком этого является то, что вы больше не сможете настраивать свои индивидуальные постоянные ссылки для своих продуктов, поскольку они просто вернутся обратно, как только вы нажмете «Сохранить».

Ниже приведен пример кода, как этого добиться:

add_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
function add_custom_attributes_to_permalink( $post_id, $post, $update ) {

    //make sure we are only working with Products
    if ($post->post_type != 'product' || $post->post_status == 'auto-draft') {
        return;
    }

    //get the product
    $_product = wc_get_product($post_id);

    //get the "clean" permalink based on the post title
    $clean_permalink = sanitize_title( $post->post_title, $post_id );

    //next we get all of the attribute slugs, and separate them with a "-"
    $attribute_slugs = array(); //we will be added all the attribute slugs to this array
    foreach ($_product->get_attributes(); as $attribute_slug => $attribute_value) {
        $attribute_slugs[] = $attribute_value;
    }
    $attribute_suffix = implode('-', $attribute_slugs);

    //then add the attributes to the clean permalink
    $full_permalink = $clean_permalink.$attribute_suffix;

    // unhook the save post action to avoid a broken loop
    remove_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );

    // update the post_name (which becomes the permalink)
    wp_update_post( array(
        'ID' => $post_id,
        'post_name' => $full_permalink
    ));

    // re-hook the save_post action
    add_action( 'save_post', 'add_custom_attributes_to_permalink', 10, 3 );
}

Большое спасибо, сэр, именно то направление, которое я искал :)

jjwebdev 26.07.2019 14:56

Я попытался скопировать и вставить ваш код на свой сайт. Но пишет Ошибка Parsar

Jornes 02.07.2021 03:55

@Jornes, это странно, вы вообще не должны получать ошибку парсера с этим кодом? И код определенно работает. Я бы предложил открыть новый вопрос, включая код, который вы используете (этот код выше), куда он был вставлен, и точную ошибку. Не стесняйтесь добавлять ссылку на свой новый вопрос в комментариях здесь, и я пойду посмотрю для вас :)

Frits 05.07.2021 15:00

Но это просто показывает. Не уверен, почему!

Jornes 19.01.2022 09:02

Другие вопросы по теме