WordPress 4.4 の新機能や変更点簡易まとめ


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](https://make.wordpress.org/core/2015/09/30/responsive-images-merge-proposal/)
- [Preparing your plugins and your client sites for termmeta / Make WordPress Core](https://make.wordpress.org/core/2015/09/22/preparing-your-plugins-and-your-client-sites-for-termmeta/)
- [Taxonomy term metadata proposal / Make WordPress Core](https://make.wordpress.org/core/2015/09/04/taxonomy-term-metadata-proposal/)
- [WP REST API: Merge Proposal / Make WordPress Core](https://make.wordpress.org/core/2015/09/21/wp-rest-api-merge-proposal/)
- [WordPress 4.4 から 他サイトの記事を引用埋め込みできるようになった「Embed」](http://nendeb.com/315)
- [oEmbeds previews of posts / Make WordPress Core](https://make.wordpress.org/core/2015/09/30/feature-plugin-merge-proposal-oembed/)

こちらも合わせてどうぞ !

[WordPress でビジネスサイトを作る時にオススメなテーマ 2015 冬](http://qiita.com/kuck1u/items/3364853cc55b2faf2b3e)