我正在开发一个插件,它不使用自定义的post类型,而是使用单独的数据库表。它是一个插件,显示课程列表,其中包含指向不同课程详细信息页面的链接,用户可以在其中订阅课程。
在当前状态下,我使用一个短代码将插件数据获取到带有自定义页面模板(page courses.php)的页面中。
我现在想要改变the_title()
动态地,根据插件显示的页面(课程列表、包含表单的课程详细信息页面、表单提交成功页面)。但每当我使用以下过滤器进行此操作时,页脚中指向其他页面的链接也会发生变化:
<?php
add_filter(\'the_title\', \'custom_page_title\');
function custom_page_title() {
return \'Custom Title\';
}
在页脚中编辑。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\';
}
类似于这个问题:
filter the_title problem in nav, 只是受影响的链接位于页脚和
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;
}
文件页面列出课程。php是我分配给名为“Courses”的静态页面的自定义帖子模板。
我假设它以前不工作,因为静态页面的名称和自定义帖子模板的文件名是相同的。
最合适的回答,由SO网友:Chip Bennett 整理而成
我会使用is_page_template()
有条件的:
if ( is_page_template( \'page-courses.php\' ) ) {
// The current page uses your
// custom page template;
// do something
}
编辑您将在过滤器回调中使用此条件:
function wpse83525_filter_the_title( $title ) {
if ( is_page_template( \'page-courses.php\' ) ) {
return \'Custom Title\';
}
return $title;
}
add_filter( \'the_title\', \'wpse83525_filter_the_title\' );
现在,要仅隔离使用页面模板的页面标题,可以利用传递给的其他参数
the_title
:
$id
. 由于您知道要筛选标题的帖子的Id,因此可以查询
_wp_page_template
发布meta,并确保它与您的页面模板一致:
function wpse83525_filter_the_title( $title, $id ) {
if ( \'page-courses.php\' == get_post_meta( $id, \'_wp_page_template\', true ) ) {
return \'Custom Title\';
}
return $title;
}
add_filter( \'the_title\', \'wpse83525_filter_the_title\', 10, 2 );
编辑2如果要专门针对“课程”页面,请使用
is_page()
使用页面slug
\'courses\'
, 或页面标题
\'Courses\'
:
function wpse83525_filter_the_title( $title ) {
if ( is_page( \'Courses\' ) ) {
return \'Custom Title\';
}
return $title;
}
add_filter( \'the_title\', \'wpse83525_filter_the_title\' );
尽管如此,我还是建议
page-courses.php
变成一个
Custom Page Template, 这将使整个过程更加稳健。