Esiste una pagina da qualche parte che dettaglia esattamente come WordPress genera slug per gli URL? Sto scrivendo uno script che deve generare slug URL identici a quelli generati da WordPress.
Esiste una pagina da qualche parte che dettaglia esattamente come WordPress genera slug per gli URL? Sto scrivendo uno script che deve generare slug URL identici a quelli generati da WordPress.
Risposte:
Non posso darti una pagina / tutorial / documentazione su come vengono generate le lumache WP, ma dai un'occhiata alla sanitize_title()
funzione.
Non dare un'impressione sbagliata dal nome della funzione, non ha lo scopo di disinfettare un titolo per un ulteriore utilizzo come titolo di pagina / post . Prende una stringa del titolo e la restituisce per essere utilizzata in un URL:
Ci potrebbero essere casi limite in cui il nucleo fa qualcosa in più (che avrebbe dovuto guardare la fonte per verificare che sanitize_title()
la volontà sempre sufficiente a generare esattamente la stessa che ci si aspetta), ma questo dovrebbe coprire almeno il 99%, se non tutti, i casi .
sanitize_title
filtro applicato nella funzione, o se sia gestito da qualcos'altro dopo l'esecuzione della funzione.
sanitize_title
filtro che bisogna controllare. Ma ci sono anche altre funzioni correlate . Non ne ho davvero idea. A volte sembra SimplePie
più facile da capire della WP_Rewrite
cosa. A proposito: Toscho lavora sull'integrazione della funzionalità "Monkeyman Rewrite Analyzer" nel suo plugin. Ecco dove le cose iniziano a diventare davvero interessanti.
Puoi usare questa funzione:
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;
}
È esattamente come funziona la funzione di sanificazione dell'url wp.
Non esiste una modalità sviluppatore integrata in WordPress a parte WP_DEBUG
, il che non ti aiuta molto in questo caso. Fondamentalmente WP usa "Rewrite API" , che è un wrapper di basso livello basato sulla funzione per la WP_Rewrite
classe, di cui puoi leggere in Codex . Ilglobal $wp_rewrite
oggetto è al tuo servizio per ispezionarlo o interagire con la classe.
Toschos "T5 Rewrite" -Plugin e Jan Fabrys "Monkeyman Rewrite Analyzer" -Plugin ti guideranno. Ho scritto una piccola estensione per "T5 Rewrite" per integrarla senza problemi con "Monkeyman Rewrite Analyzer", che puoi trovare nella wiki dei repository "T5 Rewrite" qui su GitHub .
Il plug-in "Monkeyman" aggiunge una nuova pagina, archiviata nel menu dell'interfaccia utente di amministrazione in Strumenti . Il plug-in "T5 Rewrite" aggiunge una nuova scheda di aiuto alla pagina Impostazioni > Permalink . La mia estensione aggiunge le schede della guida agli strumenti citati pagina .
Ecco uno screenshot di come appaiono i plug-in "T5 Rewrite" che aiutano il contenuto della scheda.
Vorlage = Pattern | Beschreibung = Spiegazione | Beispiele = Esempi
Il plug-in "T5 Rewrite" fa un ottimo lavoro aiutandoti a ispezionare l'oggetto di riscrittura. E lo fa ancora di più: aggiunge nuove possibilità. Pertanto fa parte (almeno nelle mie installazioni) del mio pacchetto di plugin di base.
In realtà, se sembri la funzione principale wp_insert_post (post.php), vedrai che fa quanto segue:
$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 );
La cosa fondamentale da notare è che utilizza sia wp_unique_post_slug che sanitize_title:
wp_unique_post_slug( sanitize_title(
Perdona per aver ripreso una vecchia domanda, ma avevo la stessa necessità di scoprire che questo metodo funziona perfettamente per me:
$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now
Questo metodo utilizza una doppia sanificazione.
Il primo usa il save
modalità, in cui i tag HTML e PHP vengono rimossi e gli accenti vengono rimossi (i caratteri accentati vengono sostituiti con equivalenti non accentati).
La seconda query
modalità assicura che tutti gli spazi vengano sostituiti con trattini-
e altri segni di punteggiatura rimossi.
Spero che questo aiuti qualcuno! :)