Когда мы добавляем новое сообщение в 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