Intereting Posts

Настроить автоматическое создание Post Slug в WordPress

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

Не используйте жестко кодированную версию, которую использует OP. Когда он это сделал, фильтра не было. Совсем недавно, начиная с 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; } 

Проверьте это: (вставьте его в 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); 

Напишите плагин, чтобы подключиться к фильтру wp_insert_post_data чтобы вы могли обновить 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 автоматически генерировать пул, а это значит, что вы не должны вводить свой собственный пул перед генерированием, и он не может обновлять существующие сообщения с помощью номера.

  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() здесь или что-то подобное, поскольку функция должна возвращать одну и ту же ссылку для одной и той же записи каждый раз, иначе у вас возникнут серьезные проблемы.

Повеселись!

Вы должны работать с действием wp_ajax_sample-permalink и фильтром name_save_pre .

Дополнительные примеры: https://wordpress.stackexchange.com/a/190314/42702