web-dev-qa-db-fra.com

Voir l'utilisation du modèle de page WordPress (ou non utilisé)

Lorsque je crée une nouvelle page dans WordPress, j'ai la possibilité de spécifier le modèle à utiliser à partir de mon thème (à partir d'une liste déroulante située à droite de l'interface).

Je dois trouver quels modèles disponibles ne sont pas utilisés, afin de pouvoir les supprimer.

Comment cela se fait-il s'il vous plaît?

La version de WP est 4.2.2

7
EvilDr

Ce que vous devez faire, c'est comparer les valeurs du champ méta _wp_page_template, qui contient le modèle de page sélectionné pour une seule page avec les modèles de page disponibles.

Pour cela, vous devez construire un tableau de modèles utilisés, car vous souhaitez que les modèles soient utilisés par toutes les pages, comme ci-dessous:

Utilisez array_unique pour obtenir des valeurs uniques.

Ensuite, vous devez obtenir les modèles de page disponibles, comme indiqué ici:

Last but not least, vous pouvez utiliser array_diff pour comparer les tableaux de modèles utilisés et disponibles, ce qui vous donne par la suite les modèles inutilisés.

6
Nicolai

Mettre à jour:

Informations sur l'utilisation des modèles de page dans WordPress 4.4+

Dans WordPress 4.4, la array_intersect_assoc() a été retirée de la méthode WP_Theme::get_page_templates().

Voir ticket # 13265 et changeset # 34995 .

Nous pouvons donc ajouter les informations d’utilisation des modèles de page directement dans la liste déroulante des modèles, avec le filtre theme_page_templates, sans utiliser javascript ni certaines astuces astucieuses sur le cache d’objets expliquées ici par @MikeSchinkel ou ici par @gmazzap .

Voici une démo (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 );

Exemple:

Ici, nous pouvons voir à quoi cela pourrait ressembler, avec les informations de nombre d'utilisations ajoutées aux noms de modèles:

 template usage info 

J'espère que vous pourrez adapter cela à vos besoins!

3
birgire