WordPress: como antepoñer texto cun campo personalizado ao contido do teu tipo de publicación personalizado
en WordPress, add_filter()
é unha función que se usa para conectar unha función personalizada ou unha función de WordPress existente a unha acción de filtro específica. Os filtros son un dos dous tipos de ganchos, sendo o outro as accións. Ofrecen unha forma de que as funcións modifiquen os datos doutras funcións e son a pedra angular da funcionalidade do complemento de WordPress.
Aquí está a sintaxe básica de add_filter()
:
add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )
Como sistema de xestión de contidos (CMS), WordPress foi deseñado como calquera outra plataforma... xa sexa unha páxina, unha publicación ou mesmo unha publicación personalizada, tes un título e contido. Pero non todo o contido se limita a esas dúas opcións. Un exemplo é o acrónimo biblioteca na que desenvolvín Martech Zone. Un acrónimo ten tres elementos... o acrónimo en si, o definición que mostra o que significa o acrónimo e unha explicación diso.
Puiden engadir facilmente un campo personalizado para a definición usando MetaBox, pero ese campo personalizado non se publica en todo o sitio. Unha forma de facelo sería construír un modelo personalizado para o arquivo e unha única páxina de acrónimos onde poida extraer o campo personalizado. Non obstante, iso require moito traballo e hai que facelo onde quero esa información: no arquivo, a publicación única, o extracto e a fonte do tipo de publicación personalizada.
Unha alternativa é usar o teu tema e antepoñer esa información dentro do propio contido. Neste caso, simplemente quero antepoñer unha frase curta: O {título} é o acrónimo de {definición}. Como tamén uso a biblioteca de acrónimos para códigos, tamén quero modificar o texto anteposto se o código é numérico: O {title} é o código para {definition}. Aquí tes exemplos:
0p é o acrónimo de Zero Party 404 é o código de Non atopado.
Para iso, podo utilizar add_filter para o concepto, o extracto, o feed e o RSS para antepoñer o texto apropiado. Ademais, comprobo se o acrónimo é numérico... nese caso é probable que sexa un código. (Dáme conta de que podería mellorar isto aínda máis, pero de momento está ben). Dentro do functions.php arquivo do meu
tema infantil, simplemente engado a seguinte función e logo chamo aos filtros axeitados para aplicalo en todo o sitio:// 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;
}
Agora, cando vexas o meu Acrónimo arquivo, verás que cada unha das entradas ten esa frase anteposta no fragmento. E é un parágrafo independente na páxina de publicacións únicas.