php - reales - ¿Por qué el filtro de_título() también se aplica en el título del menú?
libro de android studio en español pdf (4)
He creado la función siguiente para ocultar el título de la página. Pero cuando lo ejecuto, también oculta el nombre del menú también. ¿Alguien puede ayudar en eso será muy apreciado?
function wsits_post_page_title( $title ) {
if( is_admin())
return $title;
$selected_type = get_option(''wsits_page_show_hide'');
if(!is_array($selected_type)) return $title;
if ( ( in_array(get_post_type(), $selected_type ) ) && get_option(''wsits_page_show_hide'') )
{
$title = '''';
}
return $title;
}
add_filter( ''the_title'', array($this, ''wsits_post_page_title'') );
Nikola tiene razón:
Porque los elementos del menú también tienen títulos y deben filtrarse :).
Para hacer que esto solo llame a las publicaciones, y no a los menús, puede agregar un cheque para in_the_loop()
- si es verdadero, usted está en una publicación.
Cambie la primera línea de la función a:
if( is_admin() || !in_the_loop() )
y todo debería estar bien.
Puedes hacer algo como eso:
En tu function.php
:
add_filter( ''the_title'', ''ze_title'');
function ze_title($a) {
global $dontTouch;
if(!$dontTouch && !is_admin())
$a = someChange($a);
return $a;
}
En tu plantilla:
$dontTouch = 1;
wp_nav_menu( array(''menu'' => ''MyMenu'') );
$dontTouch = 0;
Es un poco complicado, pero puedes resolverlo agregando tu acción a loop_start.
function make_custom_title( $title, $id ) {
// Your Code Here
}
function set_custom_title() {
add_filter( ''the_title'', ''make_custom_title'', 10, 2 );
}
add_action( ''loop_start'', ''set_custom_title'' );
Al incrustar el filtro_título dentro de una acción loop_start, evitamos sobrescribir los atributos de título del menú.
Al publicar esta respuesta porque era el resultado de búsqueda que terminé haciendo clic en mientras buscaba orientar el filtro, the_title
mientras ignoraba el efecto de filtro para los elementos de navegación.
Estaba trabajando en una sección de un tema que quería agregar botones al título de la página dentro de la etiqueta del encabezado uno.
Se veía similar a esto:
<?php echo ''<h1>'' . apply_filters( ''the_title'', $post->post_title ) . ''</h1>''.PHP_EOL; ?>
Entonces estaba "conectando" de esta manera:
add_filter( ''the_title'', ''my_callback_function'' );
Sin embargo, los objetivos anteriores literalmente son todo lo que llama the_title
gancho del filtro de the_title
, y esto incluye elementos de navegación.
Cambié la definición del enlace de filtro así:
<?php echo ''<h1>'' . apply_filters( ''the_title'', $post->post_title, $post->ID, true ) . ''</h1>''.PHP_EOL; ?>
Casi todas las llamadas al the_title
pasan el parámetro 1 como $post->post_title
y el parámetro 2 como $post->ID
. Busque el código central de WordPress para apply_filters( ''the_title''*
y lo verá por usted mismo.
Así que decidí agregar un tercer parámetro para las situaciones en las que quiero orientar los artículos específicos que llaman the_title
filtro de the_title
. De esta forma, aún puedo recibir el beneficio de todas las devoluciones de llamadas que se aplican al the_title
filtro de the_title
de manera predeterminada, y también la capacidad de orientar de forma semi única los elementos que usan el the_title
filtro de the_title
con el tercer parámetro.
Es un parámetro boolean
simple:
/**
* @param String $title
* @param Int $object_id
* @param bool $theme
*
* @return mixed
*/
function filter_the_title( String $title = null, Int $object_id = null, Bool $theme = false ) {
if( ! $object_id ){
return $title;
}
if( ! $theme ){
return $title;
}
// your code here...
return $title;
}
add_filter( ''the_title'', ''filter_the_title'', 10, 3 );
Etiquete las variables como lo desee. Esto es lo que funcionó para mí, y hace exactamente lo que necesito que haga. Esta respuesta puede no ser 100% relevante para la pregunta, pero aquí es donde llegué mientras buscaba para resolver este problema. Espero que esto ayude a alguien en una situación similar.