• Выбрал ЧПУ /%postname%. Для странички ЧАВО понадобилось сократить слаги, аналогично pastebin (длинные не подходят по стилевому оформлению, да и вообще это некрасиво:)). Написал такое решение (часть одной из сети, второй из Кодекса):
    здесь генерируем слаг

    function wikicms_generate_slug( $length, $charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
        $str = '';
        $count = strlen($charset);
        while ($length--) {
            $str .= $charset[mt_rand(0, $count-1)];
        }
        return $str;
    }

    здесь его обновляем автоматом

    function wikicms_update_slug($post_id) {
        global $post;
        if ($post->post_status == 'draft') {
            remove_action('save_post', 'wikicms_update_slug');
            wp_update_post(array('ID' => $post_id, 'post_name' => wikicms_generate_slug(8)));
            add_action('save_post', 'wikicms_update_slug');
        }
    }
    add_action('save_post', 'wikicms_update_slug');

    Понадобилось решить проблему с заглавными буквами в слаге, сделал так:
    remove_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3 );
    Посему вопрос к знатокам: Как победить ненужное двойное генерирование слага, во время создания поста и в момент его первого сохранения, и по фильтру, другим способом можно разрешить заглавные буквы?

Просмотр 1 ответа (всего 1)
  • Опираясь на очередную подсказку Сергея, остановился на таком варианте

    function wikicms_update_slug($new_status, $old_status, $post) {
        global $post;
        if ( $old_status == 'draft' && $post->post_type == 'topic' )
            wp_update_post(array('ID' => $post->ID, 'post_name' => wikicms_generate_slug(11)));
    
        return;
    }
    add_action('transition_post_status', 'wikicms_update_slug', 10, 3);

    Также отказался от заглавных букв..
    —-
    По моим подсчетам, дубль в слаге будет не ранее, чем через 40 тыс топиков с вероятностью в 40% 🙂

Просмотр 1 ответа (всего 1)
  • Тема «Автоматическая генерация слага (slug)» закрыта для новых ответов.