Como o WordPress gera slugs de URL?

11

Existe uma página em algum lugar que detalha exatamente como o WordPress gera slugs para URLs? Estou escrevendo um script que precisa gerar slugs de URL idênticos aos que o WordPress gera.

    
por George Edison 30.11.2012 / 03:24

5 respostas

11

Fora do comum, eu não posso te dar uma página / tutorial / documentação sobre como os slugs WP são gerados, mas dê uma olhada no sanitize_title() .

Não fique com uma impressão errada pelo nome da função, é não pretendido para limpar um título para uso adicional como um título de página / postagem . É necessária uma string de título e retorna para ser usada em um URL:

  • mostra HTML & PHP
  • cria caracteres especiais
  • converte todos os caracteres para lowercaps
  • substitui espaços em branco, sublinhados e pontos por hifens / traços
  • reduz vários traços consecutivos para um

pode ser casos de borda onde o núcleo faz algo adicional (você teria que olhar a fonte para verificar se sanitize_title() será sempre suficiente para gerar < em> exatamente o mesmo que você espera), mas isso deve cobrir pelo menos 99%, se não todos, casos.

    
por Johannes Pille 30.11.2012 / 03:42
4

Core ao seu serviço

Não há nenhum modo de desenvolvedor embutido no WordPress além de WP_DEBUG , o que não ajuda muito nesse caso. Basicamente, o WP usa a "Rewrite API" , que é um wrapper de baixo nível baseado em função para o WP_Rewrite class, sobre a qual você pode ler no Codex . O objeto global $wp_rewrite está ao seu serviço para inspecioná-lo ou interagir com a turma.

Plugins que ajudam a pesquisar.

Toschos "T5 Reescrever" -Plugin e Jan Fabrys" Analisador de Regravação Monkeyman "-Plugin irá guiá-lo à sua maneira. Eu escrevi uma pequena extensão para o "T5 Rewrite" para integrá-lo suavemente com o "Monkeyman Rewrite Analyzer", que você pode encontrar no arquivo "reescrita T5" wikie aqui no GitHub .

O "Monkeyman" -plugin adiciona uma nova página, arquivada no menu de administração da interface Ferramentas . O plug-in "T5 Rewrite" adiciona uma nova aba de ajuda ao Configurações > Página Permalinks . Minha extensão também adiciona as guias de ajuda à Tools -página mencionada.

Aqui está uma captura de tela com a aparência do conteúdo da guia "T5 Rewrite" - plugins.

Vorlage=Padrão|Beschreibung=Explicação|Beispiele=Exemplos

Notas

Oplug-in"T5 Rewrite" faz um trabalho maravilhoso ajudando você a inspecionar o objeto reescrito. E faz ainda mais: adiciona novas possibilidades. Portanto, é (pelo menos nas minhas instalações) parte do meu pacote básico de plugins.

    
por kaiser 30.11.2012 / 03:38
3

Você pode usar esta função:

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}

É exatamente como funciona a função url sanitize wp.

    
por Vivek Sancheti 08.06.2016 / 09:35
2

Na verdade, se você procurar a função principal wp_insert_post (post.php), verá que ela faz o seguinte:

$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );

$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );

A principal coisa a notar é que usa wp_unique_post_slug e sanitize_title:

wp_unique_post_slug( sanitize_title( 
    
por Jahmic 26.09.2016 / 11:38
0

Perdoe por retomar uma pergunta antiga, mas eu tive a mesma necessidade que descobri que esse método funciona perfeitamente para mim:

$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now

Este método usa uma sanitização dupla.

O primeiro usa o modo save , onde as tags HTML e PHP são removidas e os acentos são removidos (os caracteres acentuados são substituídos por equivalentes não acentuados).

O segundo modo query garante que todos os espaços sejam substituídos por traços - e outras pontuações removidas.

Espero que isso ajude alguém! :)

    
por GigiSan 05.06.2018 / 12:23

Tags