J'ai ajouté quelques custom_post_types
différents à mon installation Wordpress 3. Ils sont tous un peu différents les uns des autres et doivent stocker des informations uniques dans custom_fields
. Mais si on peut stocker un product_id
, un autre ne le fera pas. On aura un source_url
et un autre ne sera pas. Plutôt que de devoir indiquer à mes éditeurs quels champs personnalisés devraient être utilisés avec quelles publications personnalisées, comment puis-je faire en sorte que chaque publication personnalisée inclue ses champs personnalisés dans l'interface utilisateur elle-même?
Si vous visitez "daily_cartoon", vous aurez un écran qui demande uniquement untitre,légendeetmédia.
Si vous visitez "daily_product", vous aurez un écran demandant uniquement untitre,prix,résumé, etc.
Bonjour@ Jonathan Sampson:
Il y aplusieurs plugins pour faciliter les types de publication personnaliséset certains vous permettent également de définir des champs personnalisés, sans ordre particulier:
Comme je l'ai mentionné ci-dessus, j'ai travaillé sur une interface qui ne fournit pas une interface utilisateur comme celle-ci mais plutôt une API extensible pour les types de champs complexes (et les plus simples également). pour la distribution encore. Peut-être dans quelques semaines.
Les plugins listés ci-dessus devraient répondre à vos besoins de base pour le moment et je vais essayer de rendre les miens compatibles avec les données stockées par tous ceux-ci à l'avenir, au cas où vous décidiez d'utiliser les miens à l'avenir.
Vous pouvez également trouver ce message un peu d'aide aussi:
vous pouvez ajouter des meta_boxes afin que les données des champs personnalisés y soient stockées. Étant donné que add_meta_box peut être défini en fonction de post_type, cela vous permettra d’ajouter différentes meta_box à différents types de publication.
regardez cet post pour un exemple complet de modification du type de post personnalisé new/edit scree.
J'ai récemment eu besoin de traiter un problème très similaire tout en travaillant dans un thème. La base du code était de ce post et j'avais modifié une partie du code
Ce qui suit est la première partie du code que j'ai modifié.
add_action('init', 'limited_post_type');
function my_custom_limited_post_type()
{
$labels = array(
'name' => _x('Limited Post Type', 'post type general name'),
'singular_name' => _x('Film - DVD', 'post type singular name')
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
'show_in_nav_menus' => true
);
register_post_type('limited_post_type', $args);
}
Ce qui suit est la deuxième partie du code que j'avais modifié.
foreach ( $scope as $scopeItem ) {
switch ( $scopeItem ) {
case "post": {
// Output on any post screen
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
$output = true;
break;}
case "page": {
// Output on any page screen
if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
$output = true;
break;}
case "limited_post_type": {
// Output on limited post_type onlye
if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
$output = true;
break;
}
Si vous le souhaitez s'il vous plaît envoyez-moi un message et je me ferai un plaisir de vous envoyer mon fichier functions.php pour votre référence. C’est définitivement le moyen de le faire, car j’ai passé de nombreuses nuits à tirer les cheveux comme vous-même.