Настройте автоматическое создание Post Slug в Wordpress - PullRequest
5 голосов
/ 23 декабря 2010

Когда мы добавляем новое сообщение в WordPress, после предоставления заголовка сообщения, слаг генерируется автоматически. Мне нужно отредактировать этот модуль автоматической генерации, чтобы я мог автоматически добавить какое-то произвольное число в конце слага. Как это сделать?

Ответы [ 5 ]

13 голосов
/ 19 ноября 2012

Не используйте жестко запрограммированную версию, используемую здесь.Когда он это сделал, не было фильтра.Совсем недавно, начиная с версии 3.3, был добавлен фильтр.

add_filter( 'wp_unique_post_slug', 'custom_unique_post_slug', 10, 4 );
function custom_unique_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( $custom_post_type == $post_type ) {
        $slug = md5( time() );
    }
    return $slug;
}

Однако этот метод будет изменять слаг каждый раз, когда вы сохраняете сообщение ... На что я и надеялся ...

РЕДАКТИРОВАТЬ:

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

function custom_unique_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( $custom_post_type == $post_type ) {
        $post = get_post($post_ID);
        if ( empty($post->post_name) || $slug != $post->post_name ) {
            $slug = md5( time() );
        }
    }
    return $slug;
}
2 голосов
/ 04 января 2013

Проверьте это: (вставьте его в functions.php)

function append_slug($data) {
global $post_ID;

if (!empty($data['post_name']) && $data['post_status'] == "publish" && $data['post_type'] == "post") {

        if( !is_numeric(substr($data['post_name'], -4)) ) {
            $random = rand(1111,9999);
            $data['post_name'] = sanitize_title($data['post_title'], $post_ID);
            $data['post_name'] .= '-' . $random;
        }

}
 return $data; } add_filter('wp_insert_post_data', 'append_slug', 10);
2 голосов
/ 23 декабря 2010

Напишите плагин для подключения к фильтру wp_insert_post_data, чтобы вы могли обновить слаг перед отправкой сообщения для вставки в базу данных:

function append_slug($data) {
    global $post_ID;

    if (empty($data['post_name'])) {
        $data['post_name'] = sanitize_title($data['post_title'], $post_ID);
        $data['post_name'] .= '-' . generate_arbitrary_number_here();
    }

    return $data;
}

add_filter('wp_insert_post_data', 'append_slug', 10);

Обратите внимание, что эта функция требует, чтобы WordPress сначала автоматически генерировал слаг, то есть вы не должны вводить свой слаг перед генерацией, а также не может обновлять существующие сообщения с номером.

0 голосов
/ 03 июня 2015

Вы должны работать с wp_ajax_sample-permalink action и name_save_pre filter .

Больше примеров здесь: https://wordpress.stackexchange.com/a/190314/42702

0 голосов
/ 23 декабря 2010
   add_filter('post_link','postLinkFilter', 10, 3);

   /**
    * Manipulates the permalink
    *
    * @param string $permalink
    * @param stdClass $post
    * @return string
    */
   function postLinkFilter($permalink,stdClass $post){
        return $permalink.'?12345';
   }

Не проверено в этом сценарии, но я уже использовал его, должно работать с минимумом изменений, но попробуйте и ДЕЙСТВИТЕЛЬНО протестируйте его.

В любом случае, не используйте rand() здесь или что-то похожее, так как функция должна возвращать одну и ту же ссылку для одного и того же сообщения каждый раз, в противном случае у вас будут серьезные проблемы.

Веселитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...