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.
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.
Respostas:
Imediatamente, não posso fornecer uma página / tutorial / documentação sobre como as lesmas WP são geradas, mas dê uma olhada na sanitize_title()
função.
Não obtenha uma impressão errada pelo nome da função, pois não pretende higienizar um título para uso posterior como título de página / postagem . Ele pega uma string de título e a retorna para ser usada em uma URL:
Não pode haver casos de ponta, onde o núcleo faz algo adicional (você tem que olhar para a fonte para verificar se sanitize_title()
será sempre suficiente para gerar exatamente o mesmo que você espera), mas isso deve cobrir pelo menos 99%, se não todos, os casos .
sanitize_title
filtro aplicado na função ou se foi tratado por outra coisa após a execução da função.
sanitize_title
filtro que é preciso verificar. Mas também há outras funções relacionadas . Eu realmente não tenho idéia sobre isso. Às vezes parece que SimplePie
é mais fácil entender do que WP_Rewrite
isso. Btw: Toscho trabalha na integração da funcionalidade "Monkeyman Rewrite Analyzer" em seu plugin. É aí que as coisas começam a ficar realmente interessantes.
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 a função wp url sanitize funciona.
Além do WordPress , não há um modo de desenvolvedor incorporado WP_DEBUG
, o que não ajuda muito nesse caso. Basicamente, o WP usa a "API de reconfiguração" , que é um wrapper de baixo nível baseado em função para a WP_Rewrite
classe, sobre o qual você pode ler no Codex . O global $wp_rewrite
objeto está ao seu serviço para inspecioná-lo ou interagir com a classe.
Toschos "T5 Rewrite" - Plugin e Jan Fabrys "Monkeyman Rewrite Analyzer" - Plugin o guiarão no seu caminho. Eu escrevi uma pequena extensão para o "T5 Rewrite" para integrá-lo sem problemas ao "Monkeyman Rewrite Analyzer", que você pode encontrar no repositório de publicações "T5 Rewrite" aqui no GitHub .
O plug-in "Monkeyman" adiciona uma nova página, arquivada no menu da UI do administrador em Ferramentas . O plug-in "T5 Rewrite" adiciona uma nova guia de ajuda à página Configurações > Links permanentes . Minha extensão também adiciona as guias de ajuda à página Ferramentas mencionada .
Aqui está uma captura de tela da aparência dos plug-ins "T5 Rewrite", que ajudam o conteúdo da guia.
Vorlage = Padrão | Descrição = Explicação | Beispiele = Exemplos
O plug-in "T5 Rewrite" faz um trabalho maravilhoso ao ajudá-lo a inspecionar o objeto de reescrita. E faz ainda mais: adiciona novas possibilidades. Portanto, é (pelo menos em minhas instalações) parte do meu pacote básico de plugins.
Na verdade, se você olhar a função principal wp_insert_post (post.php), verá que ele 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 );
O principal aspecto a ser observado é que usa wp_unique_post_slug e sanitize_title:
wp_unique_post_slug( sanitize_title(
Perdoe por retomar uma pergunta antiga, mas 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 desinfecção dupla.
O primeiro usa o save
modo, em que as tags HTML e PHP são removidas e os acentos são removidos (caracteres acentuados são substituídos por equivalentes não acentuados).
O segundo query
modo garante que todos os espaços sejam substituídos por traços -
e outras pontuações removidas.
Espero que isso ajude alguém! :)