web-dev-qa-db-ja.com

WordPressページテンプレートの使用状況を表示する(または未使用)

WordPressで新しいページを作成するときに、使用するテンプレートをテーマから(インターフェースの右側にあるドロップダウンリストから)指定することもできます。

削除できるように、使用可能なテンプレートのうちどれが未使用かを確認する必要があります。

これはどのように行われますか。

WPのバージョンは4.2.2です

7
EvilDr

1つのページ用に選択されたページテンプレートを含むメタフィールド_wp_page_templateの値を利用可能なページテンプレートと比較する必要があります。

このためには、使用されているテンプレートの配列を作成する必要があります。これは、すべてのページでテンプレートが使用されるようにするためです。

一意の値を取得するにはarray_uniqueを使用してください。

次に示すように、利用可能なページテンプレートを取得する必要があります。

大事なことを言い忘れましたが、array_diffを使用して使用可能なテンプレートと使用可能なテンプレートの配列を比較すると、後で未使用のテンプレートが得られます。

6
Nicolai

更新:

WordPress 4.4+のページテンプレート使用情報

WordPress 4.4では、array_intersect_assoc()WP_Theme::get_page_templates()メソッドから削除されました。

チケット #13265 および変更セット #34995 を参照してください。

したがって、JavaScriptを使用せずに、theme_page_templatesフィルターを使用してtemplate dropdownにページテンプレートの使用情報を直接追加できます ここでは@MikeSchinkelによる または ここでは@gmazzapによる

デモ(PHP 5.4 +)は次のとおりです。

add_filter( 'theme_page_templates', function( $page_templates, $obj, $post )
{
    // Restrict to the post.php loading
    if( ! did_action( 'load-post.php' ) )
        return $page_templates;

    foreach( (array) $page_templates as $key => $template )
    {
        $posts = get_posts( 
            [
                'post_type'      => 'any',
                'post_status'    => 'any', 
                'posts_per_page' => 10,
                'fields'         => 'ids',
                'meta_query'     => [
                    [
                        'key'       => '_wp_page_template',
                        'value'     => $key,
                        'compare'   => '=',
                    ]
                ]
            ]
        );

        $count = count( $posts );

        // Add the count to the template name in the dropdown. Use 10+ for >= 10
        $page_templates[$key] = sprintf( 
            '%s (%s)', 
            $template, 
             $count >= 10 ? '10+' : $count
        );          
    }
    return $page_templates;
}, 10, 3 );

例:

ここでは、テンプレート名に使用カウント情報が追加されて、どのように見えるかを確認できます。

template usage info

これをニーズに合わせて調整できることを願っています!

3
birgire