web-dev-qa-db-fra.com

Envelopper les méta-boîtes et la gestion des données pour des types de post spécifiques dans des classes?

J'ai un site avec quelques types d'articles personnalisés, chacun avec leurs propres données, boîtes à méta et ressources personnalisées (feuilles de style, images, JavaScript).

Généralement, je m'accroche sur add_meta_boxes pour enregistrer toutes mes boîtes de méta et save_post pour gérer les données, mais dans ce cas, j'aimerais encapsuler toutes les fonctionnalités de chaque type de message dans une classe et un résumé du processus d'instanciation.

Ma proposition est la suivante.

function my_prefix_admin_load_post()
{
    /* Grab current post type - can't use global $post_type since it isn't set yet! */
    if ( isset( $_GET['post'] ) )
        $post_type = get_post_type( $_GET['post'] );
    elseif ( isset( $_REQUEST['post_type'] ) )
        $post_type = basename( $_REQUEST['post_type'] );
    else
        $post_type = 'post';

    /* Construct classname & filename from post type. */
    $post_type_file = dirname( __FILE__ ) . "/inc/class-post-$post_type.php";
    $post_type_class = 'Class_Prefix_' . ucfirst( $post_type );

    if ( is_file( $post_type_file ) )
        require $post_type_file;

    if ( class_exists( $post_type_class ) )
        new $post_type_class;
}
add_action( 'load-post.php', 'my_prefix_admin_load_post' );
add_action( 'lost-post-new.php', 'my_prefix_admin_load_post' );

De cette façon, je peux ajouter à tout moment des améliorations pour un type de publication nouveau ou existant (sans bricoler avec les fonctions de base), et sans code pour différents types de publication entremêlés.

Cependant , je ne peux pas m'empêcher de penser que le processus de chargement est un peu ... dégoûtant. J'aimerais beaucoup entendre des suggestions, que ce soit des améliorations ou des approches alternatives!

1
TheDeadMedic

Pas vraiment une réponse complète, mais comme cette question est devenue une ville fantôme, je pensais que cela valait la peine d'être ajouté.

$post_type = get_current_screen()->id; // when on post.php or post-new.php

Il existe depuis un moment, mais avec les 3.3 ( API de l'écran beaucoup améliorées , je peux voir que cela ouvre un nouveau monde de chargement plus facile et à la demande.

0
TheDeadMedic