it-swarm.xyz

Создание пользовательских полей стандартными в интерфейсе администратора

Я добавил несколько разных custom_post_types к моей установке Wordpress 3. Все они немного отличаются друг от друга и должны хранить уникальную информацию в custom_fields. Но хотя один может хранить product_id, другой нет. Один будет иметь source_url, а другой - нет. Вместо того, чтобы указывать моим редакторам, какие настраиваемые поля должны использоваться с какими настраиваемыми публикациями, как я могу сделать так, чтобы каждая настраиваемая запись включала свои настраиваемые поля как часть самого пользовательского интерфейса?

Если вы посетите "daily_cartoon", у вас будет экран, который запрашивает только title , caption и media .
Если вы посетите "daily_product", у вас будет экран, который запрашивает только заголовок , цена , сводка и т.д.

7
Sampson

Привет@ Джонатан Сэмпсон:

Естьнесколько плагинов для упрощения пользовательских типов постов, а некоторые позволяют вам также определять пользовательские поля, без определенного порядка:

Как я упоминал выше, я работал над тем, который не предоставляет подобный интерфейс пользователя, а вместо этого расширяемый API для сложных типов полей (и простых). Но потратив час, пытаясь упаковать его, я понял, что он не готов для распространения еще. Может быть, через несколько недель.

Эти плагины, перечисленные выше, должны отвечать вашим основным потребностям на данный момент, и я постараюсь сделать мои совместимыми с данными, хранящимися во всех них в будущем, в случае, если вы решите использовать мои в будущем.

Вы также можете найти этот пост немного помощи тоже:

4
MikeSchinkel

вы можете добавить meta_boxes для хранения данных пользовательских полей. Так как add_meta_box может быть установлен в соответствии с типом post_type, это позволит вам добавлять разные meta_box к различным типам записей.

посмотрите на это post для полного примера изменения пользовательского типа записи new/edit scree.

5
hannit cohen

Недавно мне нужно было решить очень похожую проблему, работая над темой. Основа кода была из этого post и я изменил часть кода

Ниже приведена первая часть кода, который я изменил.

    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);
}

Ниже приведена вторая часть кода, который я изменил.

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;
                  }

Если вам нравится, пожалуйста, отправьте мне сообщение, и я с удовольствием вышлю вам файл functions.php для вашей справки. Это, безусловно, способ сделать это, поскольку я провел много ночей, когда тащил себя за себя.

0
jnolte