WordPress 4.4 が 12 月 8 日にリリース予定です。先日 WordPress 4.4 RC 版がリリースされたので、投稿まわりを中心に変更点を追ってみました。間違っているところもあるかもしれませんので、必ず自身でも確認するようにしてください。
追加された主な機能
- Twenty Sixteen
- タームメタ (Term metadata)
- レスポンシブイメージ
- 他サイトの記事の埋め込み(oEmbed)
- REST API
投稿(ポスト)
投稿(ポスト)関連の変更点。
追加されたテンプレートタグ
get_the_post_thumbnail_url()
wp-includes/post-thumbnail-template.php:180 行目付近
/**
 * Return the post thumbnail URL.
 *
 * @since 4.4.0
 *
 * @param int|WP_Post  $post Optional. Post ID or WP_Post object.  Default is global `$post`.
 * @param string|array $size Optional. Registered image size to retrieve the source for or a flat
 *                           array of height and width dimensions. Default 'post-thumbnail'.
 * @return string|false Post thumbnail URL or false if no URL is available.
 */
function get_the_post_thumbnail_url( $post = null, $size = 'post-thumbnail' ) {
    $post_thumbnail_id = get_post_thumbnail_id( $post );
    if ( ! $post_thumbnail_id ) {
        return false;
    }
    return wp_get_attachment_image_url( $post_thumbnail_id, $size );
}
the_post_thumbnail_url()
wp-includes/post-thumbnail-template.php:198 行目付近
/**
 * Display the post thumbnail URL.
 *
 * @since 4.4.0
 *
 * @param string|array $size Optional. Image size to use. Accepts any valid image size,
 *                           or an array of width and height values in pixels (in that order).
 *                           Default 'post-thumbnail'.
 */
function the_post_thumbnail_url( $size = 'post-thumbnail' ) {
    $url = get_the_post_thumbnail_url( null, $size );
    if ( $url ) {
        echo esc_url( $url );
    }
}
更新されたテンプレートタグ
wp_page_menu()
wp_page_menu() 関数の第一引数に指定できるパラメーターに、menu_id/container/before/after/walkerが追加された。
/**
 * Display or retrieve list of pages with optional home link.
 *
 * The arguments are listed below and part of the arguments are for {@link
 * wp_list_pages()} function. Check that function for more info on those
 * arguments.
 *
 * @since 2.7.0
 * @since 4.4.0 Added `menu_id`, `container`, `before`, `after`, and `walker` arguments.
 *
 * @param array|string $args {
 *     Optional. Arguments to generate a page menu. See wp_list_pages() for additional arguments.
 *
 *     @type string          $sort_column How to short the list of pages. Accepts post column names.
 *                                        Default 'menu_order, post_title'.
 *     @type string          $menu_id     ID for the div containing the page list. Default is empty string.
 *     @type string          $menu_class  Class to use for the element containing the page list. Default 'menu'.
 *     @type string          $container   Element to use for the element containing the page list. Default 'div'.
 *     @type bool            $echo        Whether to echo the list or return it. Accepts true (echo) or false (return).
 *                                        Default true.
 *     @type int|bool|string $show_home   Whether to display the link to the home page. Can just enter the text
 *                                        you'd like shown for the home link. 1|true defaults to 'Home'.
 *     @type string          $link_before The HTML or text to prepend to $show_home text. Default empty.
 *     @type string          $link_after  The HTML or text to append to $show_home text. Default empty.
 *     @type string          $before      The HTML or text to prepend to the menu. Default is '<ul>'.
 *     @type string          $after       The HTML or text to append to the menu. Default is '</ul>'.
 *     @type Walker          $walker      Walker instance to use for listing pages. Default empty (Walker_Page).
 * }
 * @return string|void HTML menu
 */
追加された条件分岐タグ
is_post_type_viewable()
そのポストタイプが閲覧可能かチェック。
wp-includes/post.php:1590 行目付近
/**
 * Determines whether a post type is considered "viewable".
 *
 * For built-in post types such as posts and pages, the 'public' value will be evaluated.
 * For all others, the 'publicly_queryable' value will be used.
 *
 * @since 4.4.0
 *
 * @param object $post_type_object Post type object.
 * @return bool Whether the post type should be considered viewable.
 */
function is_post_type_viewable( $post_type_object ) {
    return $post_type_object->publicly_queryable || ( $post_type_object->_builtin && $post_type_object->public );
}
is_embed()
wp-includes/query.php:721 行目付近
/**
 * Is the query for an embedded post?
 *
 * @since 4.4.0
 *
 * @global WP_Query $wp_query Global WP_Query instance.
 *
 * @return bool Whether we're in an embedded post or not.
 */
function is_embed() {
    global $wp_query;
    if ( ! isset( $wp_query ) ) {
        _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1' );
        return false;
    }
    return $wp_query->is_embed();
}
追加されたフィルター/アクションフック
register_post_type_args フィルター
register_post_type()関数に register_post_type_args フィルターが追加。
wp-includes/post.php:1004 行目付近
/**
 * Filter the arguments for registering a post type.
 *
 * @since 4.4.0
 *
 * @param array  $args      Array of arguments for registering a post type.
 * @param string $post_type Post type key.
 */
$args = apply_filters( 'register_post_type_args', $args, $post_type );
get_post_status フィルター
get_post_status()関数に get_post_status フィルターが追加。
wp-includes/post.php:575 行目付近
/**
 * Filter the post status.
 *
 * @since 4.4.0
 *
 * @param string  $post_status The post status.
 * @param WP_Post $post        The post object.
 */
return apply_filters( 'get_post_status', $post->post_status, $post );
pre_delete_post フィルター
wp_delete_post()関数に pre_delete_post フィルターが追加。
wp-includes/post.php:2371 行目付近
/**
 * Filter whether a post deletion should take place.
 *
 * @since 4.4.0
 *
 * @param bool    $delete       Whether to go forward with deletion.
 * @param WP_Post $post         Post object.
 * @param bool    $force_delete Whether to bypass the trash.
 */
$check = apply_filters( 'pre_delete_post', null, $post, $force_delete );
get_page_uri フィルター
get_page_uri()関数に get_page_uri フィルターが追加。
wp-includes/post.php:4298 行目付近
/**
 * Filter the URI for a page.
 *
 * @since 4.4.0
 *
 * @param string  $uri  Page URI.
 * @param WP_Post $page Page object.
 */
return apply_filters( 'get_page_uri', $uri, $page );
wp_post_revision_title_expanded フィルター
wp_post_revision_title_expanded()関数に wp_post_revision_title_expanded フィルターが追加。
wp-includes/post-template.php:1668 行目付近
/**
 * Filter the formatted author and date for a revision.
 *
 * @since 4.4.0
 *
 * @param string  $revision_date_author The formatted string.
 * @param WP_Post $revision             The revision object.
 * @param bool    $link                 Whether to link to the revisions page, as passed into
 *                                      wp_post_revision_title_expanded().
 */
return apply_filters( 'wp_post_revision_title_expanded', $revision_date_author, $revision, $link );
attachment_updated アクション
wp_insert_post()関数に attachment_updated アクションが追加。
wp-includes/post.php:3313 行目付近
/**
 * Fires once an existing attachment has been updated.
 *
 * @since 4.4.0
 *
 * @param int     $post_ID      Post ID.
 * @param WP_Post $post_after   Post object following the update.
 * @param WP_Post $post_before  Post object before the update.
 */
do_action( 'attachment_updated', $post_ID, $post_after, $post_before );
WP_Query
追加されたパラメーター
/**
 * Parse a query string and set query type booleans.
 *
 * @since 1.5.0
 * @since 4.2.0 Introduced the ability to order by specific clauses of a `$meta_query`, by passing the clause's
 *              array key to `$orderby`.
 * @since 4.4.0 Introduced `$post_name__in` and `$title` parameters. `$s` was updated to support excluded
 *              search terms, by prepending a hyphen.
 *
 * @param string|array $query {
 *     @type array        $post_name__in           An array of post slugs that results must match.
 *     @type string       $s                       Search keyword(s). Prepending a term with a hyphen will
 *                                                 exclude posts matching that term. Eg, 'pillow -sofa' will
 *                                                 return posts containing 'pillow' but not 'sofa'.
 *     @type string       $title                   Post title.
 * }
 */
追加されたメンバー変数
WP_Query::$is_embed
/**
 * Set if query is embed.
 *
 * @since 4.4.0
 * @access public
 * @var bool
 */
public $is_embed = false;
WP_Query::$updated_term_meta_cache
/**
 * Whether the term meta cache for matched posts has been primed.
 *
 * @since 4.4.0
 * @access protected
 * @var bool
 */
public $updated_term_meta_cache = false;
WP_Query::$updated_comment_meta_cache
/**
 * Whether the comment meta cache for matched posts has been primed.
 *
 * @since 4.4.0
 * @access protected
 * @var bool
 */
public $updated_comment_meta_cache = false;
追加されたメソッド
WP_Query::is_embed()
wp-includes/query.php:4708 行目付近
/**
 * Is the query for an embedded post?
 *
 * @since 4.4.0
 *
 * @return bool
 */
WP_Query::lazyload_term_meta()
wp-includes/query.php:4855 行目付近
/**
 * Lazy-loads termmeta for located posts.
 *
 * As a rule, term queries (`get_terms()` and `wp_get_object_terms()`) prime the metadata cache for matched
 * terms by default. However, this can cause a slight performance penalty, especially when that metadata is
 * not actually used. In the context of a `WP_Query` instance, we're able to avoid this potential penalty.
 * `update_object_term_cache()`, called from `update_post_caches()`, does not 'update_term_meta_cache'.
 * Instead, the first time `get_term_meta()` is called from within a `WP_Query` loop, the current method
 * detects the fact, and then primes the metadata cache for all terms attached to all posts in the loop,
 * with a single database query.
 *
 * This method is public so that it can be used as a filter callback. As a rule, there is no need to invoke it
 * directly, from either inside or outside the `WP_Query` object.
 *
 * @since 4.4.0
 * @access public
 *
 * @param mixed $check  The `$check` param passed from the 'get_term_metadata' hook.
 * @param int  $term_id ID of the term whose metadata is being cached.
 * @return mixed In order not to short-circuit `get_metadata()`. Generally, this is `null`, but it could be
 *               another value if filtered by a plugin.
 */
WP_Query::lazyload_comment_meta()
wp-includes/query.php:4931 行目付近
/**
 * Lazy-load comment meta when inside of a `WP_Query` loop.
 *
 * This method is public so that it can be used as a filter callback. As a rule, there is no need to invoke it
 * directly, from either inside or outside the `WP_Query` object.
 *
 * @since 4.4.0
 *
 * @param mixed $check     The `$check` param passed from the 'get_comment_metadata' hook.
 * @param int  $comment_id ID of the comment whose metadata is being cached.
 * @return mixed The original value of `$check`, to not affect 'get_comment_metadata'.
 */
追加されたフィルター/アクションフック
content_pagination フィルター
WP_Query::setup_postdata() メソッド内
wp-includes/query.php:721 行目付近
/**
 * Filter the "pages" derived from splitting the post content.
 *
 * "Pages" are determined by splitting the post content based on the presence
 * of `<!-- nextpage -->` tags.
 *
 * @since 4.4.0
 *
 * @param array   $pages Array of "pages" derived from the post content.
 *                       of `<!-- nextpage -->` tags..
 * @param WP_Post $post  Current post object.
 */
$pages = apply_filters( 'content_pagination', $pages, $post );
タクソノミー
タクソノミー関連の変更点。
追加されたフィルター/アクションフック
register_taxonomy_args フィルター
register_taxonomy()関数に register_taxonomy_args フィルターが追加
wp-includes/taxonomy.php:350 行目付近
/**
 * Filter the arguments for registering a taxonomy.
 *
 * @since 4.4.0
 *
 * @param array  $args        Array of arguments for registering a taxonomy.
 * @param array  $object_type Array of names of object types for the taxonomy.
 * @param string $taxonomy    Taxonomy key.
 */
$args = apply_filters( 'register_taxonomy_args', $args, $taxonomy, (array) $object_type );
taxonomy_labels_{$taxonomy} フィルター
get_taxonomy_labels()関数に taxonomy_labels_{$taxonomy} フィルターが追加。taxonomy_labels_{$taxonomy}フィルターを使用すると、カテゴリーやタグといった管理画面上のメニューや設定画面の表記を変更できる。
wp-includes/taxonomy.php:560 行目付近
/**
 * Filter the labels of a specific taxonomy.
 *
 * The dynamic portion of the hook name, `$taxonomy`, refers to the taxonomy slug.
 *
 * @since 4.4.0
 *
 * @see get_taxonomy_labels() for the full list of taxonomy labels.
 *
 * @param object $labels Object with labels for the taxonomy as member variables.
 */
$labels = apply_filters( "taxonomy_labels_{$taxonomy}", $labels );
以下に、カテゴリー管理画面上の表記をジャンルという表記に変更する例を示します。
/**
 * Change category labels.
 *
 * @param  $labels object
 * @return         object
 */
function kuck1u_change_category_labels( $labels ) {
    $name       = "ジャンル";
    $new_labels = array(
        'name'                  => sprintf( '%s', $name ),
        'singular_name'         => sprintf( '%s', $name ),
        'search_items'          => sprintf( '%sを検索', $name ),
        'all_items'             => sprintf( '%s一覧', $name ),
        'parent_item'           => sprintf( '親%s', $name ),
        'parent_item_colon'     => sprintf( '親%s', $name ),
        'edit_item'             => sprintf( '%sの編集', $name ),
        'view_item'             => sprintf( '%sを表示', $name ),
        'update_item'           => sprintf( '%sを更新', $name ),
        'add_new_item'          => sprintf( '新規%sを追加', $name ),
        'new_item_name'         => sprintf( '新規%s名', $name ),
        'not_found'             => sprintf( '%sが見つかりませんでした。', $name ),
        'no_terms'              => sprintf( '%sなし', $name ),
        'items_list_navigation' => sprintf( '%sリストナビゲーション', $name ),
        'items_list'            => sprintf( '%sリスト', $name ),
        'menu_name'             => sprintf( '%s', $name )
    );
    $new_labels = array_merge( (array)$labels, (array)$new_labels );
    return (object)$new_labels;
}
add_filter( 'taxonomy_labels_category', 'kuck1u_change_category_labels' );
get_terms_defaults フィルター
get_terms()関数に get_terms_defaults フィルターが追加。get_terms_defaults フィルターを使用すると、get_terms()関数の第二引数のデフォルトパラメーターを変更できる。
wp-includes/taxonomy.php:1108 行目付近
/**
 * Filter the terms query default arguments.
 *
 * Use 'get_terms_args' to filter the passed arguments.
 *
 * @since 4.4.0
 *
 * @param array $defaults   An array of default get_terms() arguments.
 * @param array $taxonomies An array of taxonomies.
 */
$args = wp_parse_args( $args, apply_filters( 'get_terms_defaults', $defaults, $taxonomies ) );
デフォルトの値は以下です。WordPress 4.4 から meta_query をサポートしています。
$defaults = array(
    'orderby'                => 'name',
    'order'                  => 'ASC',
    'hide_empty'             => true,
    'include'                => array(),
    'exclude'                => array(),
    'exclude_tree'           => array(),
    'number'                 => '',
    'offset'                 => '',
    'fields'                 => 'all',
    'name'                   => '',
    'slug'                   => '',
    'hierarchical'           => true,
    'search'                 => '',
    'name__like'             => '',
    'description__like'      => '',
    'pad_counts'             => false,
    'get'                    => '',
    'child_of'               => 0,
    'parent'                 => '',
    'childless'              => false,
    'cache_domain'           => 'core',
    'update_term_meta_cache' => true,
    'meta_query'             => ''
);
タームメタ (Term metadata)
WordPress 4.4 で追加されたタームメタ。タームメタはポストメタのターム版です。カテゴリー(ターム)1 つ 1 つにメタ情報を比較的簡単に追加できるようになりました。
タームメタもポストメタ同様、CRUD の API はしっかりと用意されています。
| CRUD | 関数名 | 
|---|---|
| C | add_term_meta( $term_id, $meta_key, $meta_value, $unique ) | 
| R | get_term_meta( $term_id, $key, $single ) | 
| U | update_term_meta( $term_id, $meta_key, $meta_value, $prev_value ) | 
| D | delete_term_meta( $term_id, $meta_key, $meta_value ) | 
追加されたその他の API
update_termmeta_cache()
wp-includes/taxonomy.php:1673 行目付近
/**
 * Updates metadata cache for list of term IDs.
 *
 * Performs SQL query to retrieve all metadata for the terms matching `$term_ids` and stores them in the cache.
 * Subsequent calls to `get_term_meta()` will not need to query the database.
 *
 * @since 4.4.0
 *
 * @param array $term_ids List of term IDs.
 * @return array|false Returns false if there is nothing to update. Returns an array of metadata on success.
 */
update_termmeta_cache( $term_ids );
wp_term_is_shared()
wp-includes/taxonomy.php:4273 行目付近
/**
 * Determine whether a term is shared between multiple taxonomies.
 *
 * Shared taxonomy terms began to be split in 4.3, but failed cron tasks or other delays in upgrade routines may cause
 * shared terms to remain.
 *
 * @since 4.4.0
 *
 * @param int $term_id
 * @return bool
 */
wp_term_is_shared( $term_id );
メディア
WordPress 4.4 で追加された目玉機能 レンスポンシブイメージ。それ関連の API が数点追加されています。
追加されたフィルター/アクションフック
image_get_intermediate_size フィルター
image_get_intermediate_size() 関数に image_get_intermediate_size フィルターが追加。
wp-includes/media.php:675 & 691 行目付近
/**
 * Filter the output of image_get_intermediate_size()
 *
 * @since 4.4.0
 *
 * @see image_get_intermediate_size()
 *
 * @param array        $data    Array of file relative path, width, and height on success. May also include
 *                              file absolute path and URL.
 * @param int          $post_id The post_id of the image attachment
 * @param string|array $size    Registered image size or flat array of initially-requested height and width
 *                              dimensions (in that order).
 */
return apply_filters( 'image_get_intermediate_size', $data, $post_id, $size );
追加された API
wp_get_attachment_image_url()
wp-includes/media.php:864 行目付近
/**
 * Get the URL of an image attachment.
 *
 * @since 4.4.0
 *
 * @param int          $attachment_id Image attachment ID.
 * @param string|array $size          Optional. Image size to retrieve. Accepts any valid image size, or an array
 *                                    of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $icon          Optional. Whether the image should be treated as an icon. Default false.
 * @return string|false Attachment URL or false if no image is available.
 */
wp_get_attachment_image_url( $attachment_id, $size = 'thumbnail', $icon = false );
wp_get_attachment_image_srcset()
wp-includes/media.php:930 行目付近
/**
 * Retrieves the value for an image attachment's 'srcset' attribute.
 *
 * @since 4.4.0
 *
 * @see wp_calculate_image_srcset()
 *
 * @param int          $attachment_id Image attachment ID.
 * @param array|string $size          Optional. Image size. Accepts any valid image size, or an array of
 *                                    width and height values in pixels (in that order). Default 'medium'.
 * @param array        $image_meta    Optional. The image meta data as returned by 'wp_get_attachment_metadata()'.
 *                                    Default null.
 * @return string|bool A 'srcset' value string or false.
 */
wp_get_attachment_image_srcset( $attachment_id, $size = 'medium', $image_meta = null );
wp_calculate_image_srcset()
wp-includes/media.php:962 行目付近
/**
 * A helper function to calculate the image sources to include in a 'srcset' attribute.
 *
 * @since 4.4.0
 *
 * @param array  $size_array    Array of width and height values in pixels (in that order).
 * @param string $image_src     The 'src' of the image.
 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id Optional. The image attachment ID to pass to the filter. Default 0.
 * @return string|bool          The 'srcset' attribute value. False on error or when only one source exists.
 */
wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attachment_id = 0 );
wp_get_attachment_image_sizes()
wp-includes/media.php:1112 行目付近
/**
 * Retrieves the value for an image attachment's 'sizes' attribute.
 *
 * @since 4.4.0
 *
 * @see wp_calculate_image_sizes()
 *
 * @param int          $attachment_id Image attachment ID.
 * @param array|string $size          Optional. Image size. Accepts any valid image size, or an array of width
 *                                    and height values in pixels (in that order). Default 'medium'.
 * @param array        $image_meta    Optional. The image meta data as returned by 'wp_get_attachment_metadata()'.
 *                                    Default null.
 * @return string|bool A valid source size value for use in a 'sizes' attribute or false.
 */
wp_get_attachment_image_sizes( $attachment_id, $size = 'medium', $image_meta = null );
wp_calculate_image_sizes
wp-includes/media.php:1144 行目付近
/**
 * Creates a 'sizes' attribute value for an image.
 *
 * @since 4.4.0
 *
 * @param array|string $size          Image size to retrieve. Accepts any valid image size, or an array
 *                                    of width and height values in pixels (in that order). Default 'medium'.
 * @param string       $image_src     Optional. The URL to the image file. Default null.
 * @param array        $image_meta    Optional. The image meta data as returned by 'wp_get_attachment_metadata()'.
 *                                    Default null.
 * @param int          $attachment_id Optional. Image attachment ID. Either `$image_meta` or `$attachment_id`
 *                                    is needed when using the image size name as argument for `$size`. Default 0.
 * @return string|bool A valid source size value for use in a 'sizes' attribute or false.
 */
wp_calculate_image_sizes( $size, $image_src = null, $image_meta = null, $attachment_id = 0 );
wp_make_content_images_responsive()
wp-includes/media.php:1208 行目付近
/**
 * Filters 'img' elements in post content to add 'srcset' and 'sizes' attributes.
 *
 * @since 4.4.0
 *
 * @see wp_image_add_srcset_and_sizes()
 *
 * @param string $content The raw post content to be filtered.
 * @return string Converted content with 'srcset' and 'sizes' attributes added to images.
 */
wp_make_content_images_responsive( $content );
wp_image_add_srcset_and_sizes()
wp-includes/media.php:1245 行目付近
/**
 * Adds 'srcset' and 'sizes' attributes to an existing 'img' element.
 *
 * @since 4.4.0
 *
 * @see wp_calculate_image_srcset()
 * @see wp_calculate_image_sizes()
 *
 * @param string $image         An HTML 'img' element to be filtered.
 * @param array  $image_meta    The image meta data as returned by 'wp_get_attachment_metadata()'.
 * @param int    $attachment_id Image attachment ID.
 * @return string Converted 'img' element with 'srcset' and 'sizes' attributes added.
 */
wp_image_add_srcset_and_sizes( $image, $image_meta, $attachment_id );
_wp_upload_dir_baseurl()
wp-includes/media.php:880 行目付近
/**
 * Caches and returns the base URL of the uploads directory.
 *
 * @since 4.4.0
 * @access private
 *
 * @return string The base URL, cached.
 */
_wp_upload_dir_baseurl();
_wp_get_image_size_from_meta()
wp-includes/media.php:901 行目付近
/**
 * Get the image size as array from its meta data.
 *
 * Used for responsive images.
 *
 * @since 4.4.0
 * @access private
 *
 * @param string $size_name  Image size. Accepts any valid image size name ('thumbnail', 'medium', etc.).
 * @param array  $image_meta The image meta data.
 * @return array|bool Array of width and height values in pixels (in that order)
 *                    or false if the size doesn't exist.
 */
_wp_get_image_size_from_meta( $size_name, $image_meta );
非推奨になった関数
WordPress 4.4 では、以下の 3 つの関数が非推奨となりました。その他の非推奨関数一覧は、wp-includes/deprecated.php をご覧ください。
wp_title()関数も一旦は非推奨になったようですが、WordPress 4.4 では見送りになったようです。ただ、今後のことを考えると、add_theme_support( 'title-tag' );を使用するようにした方がよいかもしれません。
- post_permalink()
- wp_get_http()
- force_ssl_login()
なうい wp_title
非推奨になった関数でも少し触れたましたが、wp_title()関数が一旦は非推奨関数になりました。今後もしかしたら完全に非推奨になるかもしれません。そうなった時に慌てないよう、なうい wp_title の使用方法に変更しましょう !
いままではテーマファイルの header.php で以下のようにしていたと思います。
<title><?php wp_title( '|', true, 'right' ); ?></title>
なうい wp_title では、header.php に HTML の title タグや wp_title()関数は書かず、functions.php にadd_theme_support( 'title-tag' )と書きます。以下にadd_theme_support( 'title-tag' )の使用例を示します。
function mytheme_setup() {
    add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'mytheme_setup' );
このようにすることで、WordPress が自動的に title タグを出力してくれます。title タグは wp_head アクションが実行された時に出力されます。WordPress デフォルトのアクションとして wp_head アクションに登録されている_wp_render_title_tag()が title タグを出力している本体です。
/**
 * Displays title tag with content.
 *
 * @ignore
 * @since 4.1.0
 * @since 4.4.0 Improved title output replaced `wp_title()`.
 * @access private
 */
function _wp_render_title_tag() {
    if ( ! current_theme_supports( 'title-tag' ) ) {
        return;
    }
    echo '<title>' . wp_get_document_title() . '</title>' . "\n";
}
_wp_render_title_tag()関数は、現在設定されているテーマが title-tag をサポートしていたら HTML の title タグを出力するというだけの極めてシンプルな内容です。
各ページで出力されるページタイトルをカスタマイズしたい場合は、_wp_render_title_tag()関数内で使用されているwp_get_document_title()関数内にあるフィルターフックを使用してカスタマイズします。使用できるフィルターフックは以下の通りです。
wp_get_document_title() 関数のフィルターフック
pre_get_document_title
title タグのタイトル全部を変更したい場合は、このフィルターを使用します。
pre_get_document_title フィルターは、wp_get_document_title()関数の先頭で宣言されていています。このフィルターを使用して、空以外の文字列をセットすると、wp_get_document_title()関数はその値を即座に返します。
function my_pre_get_document_title( $title ) {
    if ( is_page( 'gochiwp' ) ) {
        $title = "ご注文は WordPress ですか????";
    }
    return $title;
}
add_filter( 'pre_get_document_title', 'my_pre_get_document_title' );
document_title_separator
サイト名とページタイトルの区切りに使用されている記号を変更したい場合は、このフィルターを使用します。
function my_document_title_separator( $sec ) {
    $sec = "|";
    return $sec;
}
add_filter( 'document_title_separator', 'my_document_title_separator' );
document_title_parts
サイト名とページタイトルを逆にしたい/ページタイトルだけ変更したい場合は、このフィルターを使用します。
このフィルターの値は、連想配列になっている点に注意が必要です。
| 並び順 | キー | バリュー | 
|---|---|---|
| 0 | $title['title'] | 現在閲覧しているページのページタイトル | 
| 1 | $title['page'] | 現在閲覧しているページのページ数(ページ分割やアーカイブページのページネーション) | 
| 2 | $title['tagline'] | サイトのディスクリプション(ホームページまたはフロントページの時のみセットされる) | 
| 3 | $title['site'] | サイト名 | 
各キーは必ず存在しているわけではありません。ページに応じたキーとバリューがセットされます。この配列を PHP のimplode()関数で連結し title タグの文言を生成しています。
以下に、サイトタイトルを必ず先頭に表示するようにする例を示します。
function my_document_title_parts( $title ) {
    $parts = $title;
    if ( !is_home() && !is_front_page() ) {
        $site = array( 'site' => $parts['site'] );
        unset( $parts['site'] );
        $parts = array_merge( $site, $parts );
    }
    return $parts;
}
add_filter( 'document_title_parts', 'my_document_title_parts' );
参考記事
- Responsive Images: Merge Proposal / Make WordPress Core
- Preparing your plugins and your client sites for termmeta / Make WordPress Core
- Taxonomy term metadata proposal / Make WordPress Core
- WP REST API: Merge Proposal / Make WordPress Core
- WordPress 4.4 から 他サイトの記事を引用埋め込みできるようになった「Embed」
- oEmbeds previews of posts / Make WordPress Core
こちらも合わせてどうぞ !
