我正在开发一个不使用自定义帖子类型,而是使用单独的数据库表的插件。它是一个插件,它显示课程列表,并带有指向不同课程详细信息页面的链接,然后用户可以在其中订阅课程。
在当前状态下,我正在使用简码将插件数据放入具有自定义页面模板(page-courses.php)的页面中。
我现在要the_title()
根据插件显示的页面(课程列表,带有表单的课程详细信息页面,表单提交成功页面)进行动态更改。但是只要我使用以下过滤器执行此操作,到页脚中其他页面的链接也会更改:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
编辑
在footer.php中,我具有一个包含页脚链接的函数,wp_nav_menu()
因此可以在外观>菜单中对其进行定义。但是,使用上面的过滤器后,页脚中的所有链接也会更改为“自定义标题”。但我只想更改页面标题,而不影响页脚中的菜单链接。
试图添加条件标记in_the_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';
}
类似于这个问题:在nav中过滤the_title问题,只是受影响的链接在页脚中,in_the_loop()
并且不起作用。
我如何更改the_title()
而只影响显示的当前页面标题而不影响页脚中的链接?
编辑2-解决方案
所以我终于让它工作了:
<?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;
}
文件page-listcourses.php是一个自定义帖子模板,我将其分配给名为“课程”的静态页面。
我认为以前没有用,因为静态页面的名称和“自定义帖子模板”的文件名是相同的。
in_the_loop()
设置为true
每当the_post()
触发时。没有深入研究内核,也不知道导航菜单本身就是循环,我猜测在此过程中的某个地方会wp_nav_menu()
实例化一个循环,从而导致in_the_loop()
返回true
。