web-dev-qa-db-fra.com

Comment changer la page de création de publication?

Existe-t-il un moyen (plug-in ou autre chose) de définir un menu déroulant sur la page "Nouveau message" qui vous permet de choisir un type de message et que les champs changent, vous permettant ainsi de filtrer le contenu que vous mettez dans un message? postez sans dérouter un utilisateur en ayant 20 champs personnalisés différents sur la page "Nouvelle publication".

De plus, existe-t-il un plugin ou autre capable de créer des champs personnalisés avec différents types de valeur (textarea, liste, téléchargement de fichier, etc.)?

2
Jo Albright

Cela a été demandé à plusieurs reprises:

et si vous n'êtes pas dans le code, vous pouvez utiliser des plugins comme

j'espère que cela t'aides

1
Bainternet

Je comprends votre inquiétude; Si vous avez beaucoup de types de messages, le menu administrateur de WordPress devient rapidement difficile à manier. Ce que j'ai fait pour vous est de mettre en œuvre quelque chose comme ce que vous avez demandé. Il crée une metabox de page d'édition pour la nouvelle page d'article avec une liste déroulante de types d'articles personnalisés comme celui-ci:

 WordPress Custom Post Type Selector Metabox 

Et voici à quoi cela ressemble avec un tas de types d'articles personnalisés en mode déroulant:

Ce qu'il fait, c'est utiliser jQuery et Javascript pour modifier window.location.href dans le DOM du navigateur lors de la sélection à l'aide de l'un des modèles d'URL suivants, en utilisant comme exemple les types de publication dans ma liste de captures d'écran:

http://example.com/wp-admin/post-new.php // This is for post_type=post
http://example.com/wp-admin/post-new.php?post_type=page 
http://example.com/wp-admin/post-new.php?post_type=actor
http://example.com/wp-admin/post-new.php?post_type=movie
http://example.com/wp-admin/post-new.php?post_type=car 
http://example.com/wp-admin/post-new.php?post_type=event
http://example.com/wp-admin/post-new.php?post_type=performer

Une chose qui me préoccupe cependant, c'est la facilité d'utilisation, alors je l'ai écrit pour désactiver le menu déroulant une fois que l'utilisateur a modifié la valeur d'un champ de saisie. De cette façon, l'utilisateur ne peut pas perdre accidentellement tout ce sur quoi il travaillait.

Le code suit et vous pouvez le placer dans le fichier functions.php de votre thème ou dans un fichier .php pour un plug-in que vous écrivez peut-être:

add_action('add_meta_boxes', 'add_meta_boxes_post_type_switcher',10,2);
function add_meta_boxes_post_type_switcher($post_type,$post) {
  global $pagenow;
  if ($pagenow=='post-new.php') {
    require_once(ABSPATH . 'wp-admin/includes/template.php');
    add_meta_box('post_type_switcher','Change Post Type',
                 'post_type_switcher',$post_type,'side','high');
  }
}
function post_type_switcher($post,$metabox) {
  $post_types = get_post_types();
  $new_post_url = admin_url('post-new.php');
  $js =<<<JS
<script type="text/javascript">
jQuery(document).ready(function ($) {
  $("#post-type-switcher-selector").change(function() {
    var post_type = $(this).find(":selected").val();
    var new_post_type_url = "{$new_post_url}?post_type=" + post_type;
    if (post_type=="post" && "{$new_post_url}"!=window.location.href) {
      window.location.href = "{$new_post_url}";
    } else if (new_post_type_url!=window.location.href) {
      window.location.href = new_post_type_url;
    }
  });
  $(".wp-admin #wpbody-content :input").change(function() {
    $("#post-type-switcher-selector").attr("disabled","disabled");
  });
});
</script>
JS;
  echo $js;
  echo '<select id="post-type-switcher-selector">';
  foreach ( $post_types as $post_type ) {
    $post_type_object = get_post_type_object($post_type);
    if ($post_type_object->publicly_queryable && $post_type!='attachment') {
      echo "\n\t<option ";
      if ( $post_type == $post->post_type ) // Make default first in list
        echo "selected='selected' ";
      echo "value='{$post_type}'>";
      echo $post_type_object->labels->singular_name;
      echo "</option>";
    }
  }
  echo '</select>';
}

Donc, il y a le code et cela devrait fonctionner pour vous. Si vous avez des questions sur des détails dans le code, il suffit de demander. Cependant je vous recommanderais plutôt de considérer un menu consolidé comme celui-ci car je pense que cela crée un modèle mental plus cohérent pour l'utilisateur, mais le choix C'est le tien!

3
MikeSchinkel