动态更改页面的_title()

时间:2013-01-28 作者:Gchtr

我正在开发一个插件,它不使用自定义的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”的静态页面的自定义帖子模板。

我假设它以前不工作,因为静态页面的名称和自定义帖子模板的文件名是相同的。

4 个回复
最合适的回答,由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, 这将使整个过程更加稳健。

SO网友:Mark Kaplun

虽然is_page_template() 如果可以的话,我更喜欢将这种代码放在页面模板本身中,以便将生成这种页面的所有代码都放在一个文件中。

SO网友:pixeline

如果只想编辑当前页面标题,请使用in_the_loop()有条件的,如:

add_filter( \'the_title\', \'modify_onpage_title\', 10, 2);

function modify_onpage_title( $title , $id = null ) {

    if(!in_the_loop()){
        // returns early if not relevant (as in custom menu loops)
        return $title;
    }

    // Tweak your title
    $title = "Yolo! ". $title;
    return $title;
}

SO网友:theMojoWill

尝试使用conditional tags 确保the_title() 仅在您想要的页面上进行修改。

结束

相关推荐

Restore Image Title Text

在WordPress 3.5中,将图像插入帖子时,图像标记中不包括title属性。我正在使用的Lightbox插件要求在图像上显示标题标签;此外,我喜欢有悬停工具提示。是否有某种方法可以恢复以前包含title属性的行为?