Estou desenvolvendo um plug-in que não usa um tipo de postagem personalizado, mas separa tabelas de banco de dados. É um plug-in que exibe uma lista de cursos com links que levam às diferentes páginas de detalhes do curso, onde o usuário pode se inscrever em um curso.
No estado atual, estou usando um código de acesso para inserir os dados dos plugins em uma página com um modelo de página personalizado (page-cursos.php).
Agora eu quero mudar the_title()
dinamicamente, de acordo com a página que o plug-in mostra (lista de cursos, página de detalhes do curso com formulários, página de êxito no envio de formulários). Mas sempre que faço isso com o seguinte filtro, os links para outras páginas no rodapé também mudam:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Editar
No footer.php, tenho uma função que inclui links de rodapé wp_nav_menu()
para que eu possa defini-los em Aparência> Menus. Mas com o filtro acima, todos os links no rodapé também mudam para 'Título personalizado'. Mas eu só quero mudar o título da página, sem afetar os links do menu no rodapé.
Tentando adicionar uma marca condicional, in_the_loop()
os links do rodapé ainda são afetados, embora não estejam no loop.
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
if ( in_the_loop() ) {
add_filter( 'the_title', 'custom_page_title' );
}
}
function custom_page_title() {
return 'Custom Title';
}
É semelhante a esta pergunta: filtre o problema do título na navegação , apenas que os links afetados estão no rodapé e in_the_loop()
não funcionam.
Como posso alterar the_title()
enquanto afeta apenas o título da página atual que está sendo mostrada e não afeta os links no rodapé ?
Edit 2 - Solution
Então eu finalmente consegui funcionar:
<?php
add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}
function wpse83525_filter_the_title( $title, $id ) {
if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
return 'Custom Title';
}
return $title;
}
O arquivo page-listcourses.php é um modelo de postagem personalizado que eu atribuí à página estática denominada 'Cursos'.
Suponho que não funcionou antes porque o nome da página estática e o nome do arquivo do Modelo de Postagem Personalizado eram os mesmos.
in_the_loop()
está definido como true
sempre que the_post()
é acionado. Sem me aprofundar muito no núcleo, e sabendo que os menus de navegação são eles mesmos loops , acho que em algum momento do processo wp_nav_menu()
instancia um loop, causando o in_the_loop()
retorno true
.