问题描述

我正在开发一个不使用自定义帖子类型的插件,但是单独的数据库表。它是一个插件,显示一系列具有链接的课程列表,导致不同的课程详细信息页面,用户然后可以订阅课程。

在当前状态下,我使用短代码将插件数据导入具有自定义页面模板 (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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。