WordPress: come anteporre un testo con un campo personalizzato al contenuto del tipo di post personalizzato
su Wordpress, add_filter()
è una funzione utilizzata per agganciare una funzione personalizzata o una funzione WordPress esistente a una specifica azione di filtro. I filtri sono uno dei due tipi di Hook, l'altro è Actions. Forniscono alle funzioni un modo per modificare i dati di altre funzioni e sono la pietra angolare della funzionalità dei plugin di WordPress.
Ecco la sintassi di base di add_filter()
:
add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )
Come sistema di gestione dei contenuti (CMS), WordPress è stato progettato come qualsiasi altra piattaforma... che si tratti di una pagina, di un post o anche di un post personalizzato, hai un titolo e un contenuto. Ma non tutti i contenuti sono limitati a queste due opzioni. Un esempio è il acronimo libreria su cui ho sviluppato Martech Zone. Un acronimo ha tre elementi... l'acronimo stesso, il definizione che mostra cosa rappresenta l'acronimo e una sua spiegazione.
Sono stato in grado di aggiungere facilmente un campo personalizzato per la definizione utilizzando MetaBox, ma quel campo personalizzato non è pubblicato in tutto il sito. Un modo per farlo sarebbe creare un modello personalizzato per l'archivio e una singola pagina dell'acronimo in cui posso estrarre il campo personalizzato. Tuttavia, ciò richiede un bel po' di lavoro e deve essere fatto ovunque io voglia quell'informazione: nell'archivio, nel singolo post, nell'estratto e nel feed del tipo di post personalizzato.
Un'alternativa è utilizzare il tema e anteporre tali informazioni all'interno del contenuto stesso. In questo caso, voglio semplicemente anteporre una breve frase: Il {titolo} è l'acronimo di {definizione}. Poiché utilizzo anche la libreria degli acronimi per i codici, desidero anche modificare il testo anteposto se il codice è numerico: Il {titolo} è il codice per {definizione}. Ecco alcuni esempi:
0p è l'acronimo di Zero Party ed 404 è il codice per Not Found.
Per fare ciò, posso utilizzare add_filter per il concetto, l'estratto, il feed e l'RSS per anteporre il testo appropriato. Inoltre, controllo per vedere se l'acronimo è numerico... nel qual caso è probabile che sia un codice. (Mi rendo conto che potrei migliorarlo ulteriormente, ma per ora va bene). All'interno del functions.php file di mio
bambino tema, aggiungo semplicemente la seguente funzione e quindi chiamo i filtri appropriati per applicarla in tutto il sito:// Prepend text to the content of 'acronym' posts
add_filter('the_content', 'prepend_text_to_acronym');
add_filter('the_excerpt', 'prepend_text_to_acronym');
add_filter('the_content_feed', 'prepend_text_to_acronym');
add_filter('the_excerpt_rss', 'prepend_text_to_acronym');
function prepend_text_to_acronym($content) {
global $post;
// Check if it's an 'acronym' post
if($post->post_type == 'acronym') {
// Get the post title and the 'acronym_definition' field
$title = get_the_title($post->ID);
$definition = get_post_meta($post->ID, 'acronym_definition', true);
if (is_numeric($title)) {
$new_content = "<p>$title is the code for $definition.</p>";
} else {
$new_content = "<p>$title is the acronym for $definition.</p>";
}
// Prepend the new content to the original content
$content = $new_content . $content;
}
return $content;
}
Ora, quando vedi il mio Acronimo archive, vedrai che ciascuna delle voci ha quella frase anteposta nell'estratto. Ed è un paragrafo autonomo nella pagina dei singoli post.