Personalize a geração automática de Post Slug em WordPress

Quando adicionamos nova postagem no wordpress, depois de fornecer o título da postagem, o slug é gerado automaticamente. Eu preciso editar esse módulo de geração automática para que eu possa adicionar algum número arbitrário no final do slug automaticamente. Como fazer isso?

Não use a versão codificada que o OP usou aqui. Quando ele fez isso, não havia um filtro disponível. Mais recentemente, desde 3,3, foi adicionado um filtro.

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; } 

No entanto, este método irá mudar o slug sempre que você salvar a postagem … Qual era o que eu esperava …

EDITAR:

Este tipo de trabalhos para limitar a geração apenas uma vez. A única desvantagem é que ele cria uma versão quando ajax é executado após a criação do título e, em seguida, cria outra lesão permanente quando a postagem é salva.

 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; } 

Teste isso: (cole-o em 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); 

Escreva um plugin para ligar o filtro wp_insert_post_data para que você possa atualizar o slug antes que a publicação seja enviada para inserção no database:

 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); 

Observe que esta function exige que você permita que o WordPress gere automaticamente o slug primeiro, o que significa que você não deve inserir seu próprio slug antes de gerar, e não pode atualizar postagens existentes com o número.

  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'; } 

Não testado nesse cenário, mas já o usei, deveria funcionar com um mínimo de mudanças, mas tente testá-lo REALMENTE com cuidado.

Em qualquer caso, não use rand() aqui ou algo parecido, uma vez que a function deve retornar o mesmo link para a mesma publicação sempre, caso contrário, você terá alguns problemas sérios.

Diverta-se!

Você deve operar com wp_ajax_sample-permalink action e name_save_pre filter .

Mais exemplos aqui: https://wordpress.stackexchange.com/a/190314/42702