如何将此条件逻辑应用于复杂的页面标题/副标题功能?

时间:2013-09-26 21:08:44

标签: php wordpress

我正在使用一些函数和条件来显示所有页面上的页面标题和子页面标题字段。我没有将此代码添加到页面模板中,而是将其添加到我的函数文件中,因此如果我愿意的话,我也可以轻松添加条件。我发现这个代码在页面上成功地向‘the_title’函数添加了一些内容,但是我在将代码和条件应用到它时遇到了问题。

这是我目前在页面模板上的条件代码:

<?php $subtitle = get_post_meta($post->ID, 'html5blank_webo_subtitle', true); ?>
    <?php if ( $subtitle ) : ?>
        <div class="page-title"><?php the_title(); ?></div>
        <h1 class="subtitle"><?php the_subtitle(); ?></h1>
    <?php else : ?>
        <h1 class="page-title"><?php the_title(); ?></h1>
<?php endif; ?>

以下是我找到的代码,并尝试将上述代码应用于:

add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
    if('page' == get_post_type($id))
        $title = 'Application has been updated to v'.$title;
    return $title;
}

这是我失败的尝试:

add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
    if('page' == get_post_type($id))
        $subtitle = get_post_meta($post->ID, 'html5blank_webo_subtitle', true);
    if ( $subtitle ) :
        $title = '<div class="page-title">' . the_title() . '</div><h1 class="subtitle">' . the_subtitle() . '</h1>';
    else :
        $title = '<h1 class="page-title">' . the_title() . '</h1>';
    endif;
    return $title;
}

最终工作代码:

// Swapping the default 'the_title' with our subtitle on pages
function subtitle_title( $title, $id ) {
    if( !in_the_loop() || !is_page() ) // If not in the loop or on a page, default the the regular 'the_title'
        return $title;

    $subtitle = get_post_meta( $id, 'html5blank_webo_subtitle', true );
    if ( $subtitle ) :
        $title = '<div class="page-title">' 
            . $title
            . '</div><h1 class="subtitle">'
            . $subtitle
            . '</h1>';
    else :
        $title = '<h1 class="page-title">' . $title . '</h1>';
    endif;
    return $title;
}
add_filter( 'the_title', 'subtitle_title', 10, 2 );

1 个答案:

答案 0 :(得分:1)

WordPress没有the_subtitle函数,但通常所有以the_*开头的函数都会打印值,以get_the_*开头的函数返回值。

您的代码进入了无限循环,因为您在过滤the_title的函数内调用了get_the_title(应该是the_title)。可以修复在回调中删除和添加过滤器,但这不是必需的,因为标题已经可用

而且,如果没有定义$post,你就不会使用the_subtitle(),而且你也不需要它,帖子ID也已经可用。

最后,我认为您将此$subtitle=get_post_meta()函数与从add_filter( 'the_title', 'new_title', 10, 2 ); function new_title( $title, $id ) { # http://codex.wordpress.org/Conditional_Tags if( !is_page_template( 'about.php' ) ) return $title; if( 'page' == get_post_type( $id ) ) $subtitle = get_post_meta( $id, 'html5blank_webo_subtitle', true ); if ( $subtitle ) : $title = '<div class="page-title">' . $title . '</div><h1 class="subtitle">' . $subtitle . '</h1>'; else : $title = '<h1 class="page-title">' . $title . '</h1>'; endif; return $title; } 获得的值混淆。

{{1}}