问题描述
我正在开发一个不使用自定义帖子类型的插件,但是单独的数据库表。它是一个插件,显示一系列具有链接的课程列表,导致不同的课程详细信息页面,用户然后可以订阅课程。
在当前状态下,我使用短代码将插件数据导入具有自定义页面模板 (page-courses.php) 的页面。
我现在想要动态更改 the_title()
,根据插件显示的页面 (课程列表,课程详细信息页面,表单,表单提交成功页面) 。但是,只要使用以下过滤器执行此操作,页脚中其他页面的链接也会更改:
<?php
add_filter('the_title', 'custom_page_title');
function custom_page_title() {
return 'Custom Title';
}
Edit
在 footer.php 中,我有一个包含与 wp_nav_menu()
的脚注链接的功能,所以我可以在 Appearance> 菜单。但是使用上面的过滤器,页脚中的所有链接也会更改为’Custom Title’ 。但是我只想更改页面的标题,不会影响页脚中的菜单链接。
尝试添加条件标签 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;
}
文件 page-listcourses.php 是一个自定义帖子模板,我分配给静态页面,名为’Courses’ 。
我认为以前没有工作,因为自定义帖子模板的静态页面和文件名的名称是一样的。
最佳解决方案
我会使用 is_page_template()
条件:
if ( is_page_template( 'page-courses.php' ) ) {
// The current page uses your
// custom page template;
// do something
}
Edit
您将在过滤器回调中使用此条件:
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
后期元数据,并确保它等于您的页面模板:
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
如果要专门针对”Courses” 页面,请使用 is_page()
与页面插槽'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
更改为自定义页面模板,这将使整个过程更加强大。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。