如何在WordPress主题标题中创建全局字幕

时间:2017-09-08 作者:Starlight1992

所以我在一个网站上工作。我希望在网站的内部页面上,有一个不同的标题和副标题来代表该页面。不幸的是,我正在处理的主题最初没有标题,而是在内容区域中。

The solution I want: 我想在标题中创建一个全局标题和副标题,该标题和副标题随每页的变化而变化。博客、联系人等。

Things I have tried:

<查看是否有插件。尝试GP挂钩,似乎只适用于主题generatePress。其他人没有按我希望的方式工作。

我试图编辑标题。php文件,添加以下div:

<div class="row"><div class="heading col-md-12 col-sm-12 col-xs-12"><h1><?php echo $pageTitle ?></h1></div></div>

然后我进入了子主题,并将此代码添加到函数中。php文件:

if (body_class === page-id-2){ $pageTitle = \'THE CROSS LIFE\'; }
我知道这可能是错误的做法,但我想看看这是否适用于特定页面。我仍在学习编码和javascript,希望能得到一些急需的帮助。我是否做了错误的if语句?或者有没有一种我完全不知道的方法?

website: http://yourcrosslife.com/test/sample-page/

2 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

我创建了一个single file plugin 它结合了以下所有代码以便于使用,部分是出于无聊。

显示当前标题很简单echo get_the_title(); 它实际上就是要在哪里显示它,以及如何通过HTML包装它。

WordPress没有字幕,所以您必须创建custom post meta 保存和显示此数据。如果您不熟悉post meta,那么它只是附加到帖子上的附加数据,我们可以在以后发布和访问时提交。通常有3个钩子允许您创建post元字段:

所有这些都是有效的选项,但用户在管理屏幕时很明显,在主标题框下方放置字幕输入框是最简单的。我们可以通过向函数文件中添加以下代码来实现这一点:

/**
 * Edit the post-edit form after title input
 *
 * @param WP_Post $post - Current post object
 *
 * @return void
 */
function wpse_subtitle_metadisplay( $post ) {

    // Post types to display the subtitle field
    $acceptable_types = array( \'page\' );

    // Ensure this post type meets our criteria
    if( empty( $acceptable_types ) || ! in_array( $post->post_type, $acceptable_types ) ) {
        return;
    }

    // Get our field value, if it exists
    $subtitle = get_post_meta( $post->ID, \'wpse_subtitle\', true );

    // Set a security nonce
    wp_nonce_field( \'wpse279493_subtitle_metadisplay\', \'wpse279493_subtitle_metadisplay_field\' );

    // Display the input in a similar fashion to the post title input box
    printf( \'<input type="text" name="wpse_subtitle" id="wpse_subtitle" class="widefat" value="%1$s" placeholder="%2$s" style="margin:8px 0 0 0;padding:3px 8px;font-size:1.7em;" />\',
            esc_attr( $subtitle ),
            __( \'Enter subtitle here\' )
    );

}
add_action( \'edit_form_after_title\', \'wpse_subtitle_metadisplay\' );
现在我们正在显示输入字段,我们需要使用save_post

/**
 * Save the subtitle metadata
 *
 * @param Integer $post_id - Current Post ID
 * @param WP_Post Object $post - Current Post Object
 *
 * @return void
 */
function wpse_save_subtitle_metadata( $post_id, $post ) {

    // If we\'re not in the right place, bailout!
    if( ! isset( $post ) || wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
        return false;
    }

    // Ensure our nonce is intact
    if( isset( $_POST, $_POST[\'wpse279493_subtitle_metadisplay_field\'] ) && wp_verify_nonce( $_POST[\'wpse279493_subtitle_metadisplay_field\'], \'wpse279493_subtitle_metadisplay\' ) ) {

        // Save our subtitle metadata OR delete postmeta if left empty
        if( isset( $_POST[\'wpse_subtitle\'] ) && ! empty( $_POST[\'wpse_subtitle\'] ) ) {

            // Save out data to our post
            update_post_meta( $post_id, \'wpse_subtitle\', sanitize_text_field( $_POST[\'wpse_subtitle\'] ) );

        } else {

            // If input is empty, delete the value from the database to keep clutter free!
            delete_post_meta( $post_id, \'wpse_subtitle\' );

        }

    }

}
add_action( \'save_post\', \'wpse_save_subtitle_metadata\', 10, 2 );
最后,现在我们都在显示字幕字段并保存给定的输入,我们所需要做的就是显示这些信息。我们可以通过使用get_post_meta().

导航希望标题显示的位置,并输入以下内容:

<?php
    global $post;

    $subtitle = get_post_meta( $post->ID, \'wpse_subtitle\', true );
?>

<h1><?php echo get_the_title(); ?></h1> <!-- display main title -->

<?php if( ! empty( $subtitle ) ) : ?>

    <h2><?php echo $subtitle; ?></h2> <!-- display sub title -->

<?php endif; ?>
一旦它们显示在前端,您就可以根据自己的喜好对其进行样式设置。

SO网友:Mihai Papuc

如果主题构建正确,可以使用以下插件Yoast SEO 管理您的标题。

如果没有,你可以add the title tags in your child theme.

结束