netconstructorcom
  • 0
Мастер

Добавление пользовательского поля к вводу таксономии: панель

  • 0

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

По сути, у меня есть настраиваемый тип сообщения «Статьи» для этого настраиваемого типа сообщения. У меня есть новая таксономия, которую я зарегистрировал и которая была создана, чтобы можно было добавлять исходные публикации.

Моя цель состояла в том, чтобы иметь возможность добавить статью с помощью этого пользовательского типа публикации, а затем выбрать подходящую «исходную публикацию» из списка терминов, чтобы я мог показать, откуда взята статья.

Теперь проблема, с которой я столкнулся, кажется простой… Все, что я пытаюсь сделать, это добавить несколько дополнительных полей на страницу, где вы можете ввести каждый термин таксономии. В этом случае я хотел бы добавить поле для «URL» и включить изображение для каждого источника, чтобы я мог добавить логотип.

Итак, вопрос здесь в том, как мне добавить дополнительное поле к каждому термину?

Я предполагаю, что если wordpress наивно не допускает эту функциональность, то каким-то образом поле «описание» может использоваться как тип области настраиваемых полей и, таким образом, данные могут храниться там.

Затем я пытаюсь, конечно, извлечь данные и отобразить их.

Я смог настроить заголовки столбцов таксономии на случай, если кому-то интересно, так же, как столбцы можно изменить для пользовательских типов сообщений, например:

// CUSTOM TAXONOMY COLUMNS FOR CONTENT SOURCES
   add_filter("manage_edit-content_sources_columns", 'content_sources_columns');    
   function content_sources_columns($content_sources_columns) {
    $new_columns = array(
        'cb' => '<input type="checkbox" />',
        'name' => __('Name'),
//      'source_image' => '',
        'description' => __('URL'),
        'slug' => __('Slug'),
        'posts' => __('Posts')
        );
    return $new_columns;
   }
Share
  1. Привет @NetConstructor.com :

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

    <?php
    /*
     * Example code showing how to hook WordPress to add fields to the taxonomny term edit screen.
     * 
     * This example is meant to show how, not to be a drop in example.
     *
     * This example was written in response to this question:
     *
     *    http://lists.automattic.com/pipermail/wp-hackers/2010-August/033671.html
     *
     * By:
     *
     *    Mike Schinkel (http://mikeschinkel.com/custom-wordpress-plugins/)
     *
     * NOTE:
     *
     *    This could easily become a plugin if it were fleshed out.
     *    A class with static methods was used to minimize the variables & functions added to the global namespace.
     *    wp_options was uses with one option be tax/term instead of via a serialize array because it aids in retrival
     *    if there get to be a large number of tax/terms types. A taxonomy/term meta would be the prefered but WordPress
     *    does not have one.
     *
     * This example is licensed GPLv2.
     *
     */
    
    // These are helper functions you can use elsewhere to access this info
    function get_taxonomy_term_type($taxonomy,$term_id) {
      return get_option("_term_type_{$taxonomy}_{$term->term_id}");
    }
    function update_taxonomy_term_type($taxonomy,$term_id,$value) {
      update_option("_term_type_{$taxonomy}_{$term_id}",$value);
    }
    
    //This initializes the class.
    TaxonomyTermTypes::on_load();
    
    //This should be called in your own code. This example uses two taxonomies: 'region' & 'opportunity'
    TaxonomyTermTypes::register_taxonomy(array('region','opportunity'));
    
    class TaxonomyTermTypes {
      //This initializes the hooks to allow saving of the
      static function on_load() {
        add_action('created_term',array(__CLASS__,'term_type_update'),10,3);
        add_action('edit_term',array(__CLASS__,'term_type_update'),10,3);
      }
      //This initializes the hooks to allow adding the dropdown to the form fields
      static function register_taxonomy($taxonomy) {
        if (!is_array($taxonomy))
          $taxonomy = array($taxonomy);
        foreach($taxonomy as $tax_name) {
          add_action("{$tax_name}_add_form_fields",array(__CLASS__,"add_form_fields"));
          add_action("{$tax_name}_edit_form_fields",array(__CLASS__,"edit_form_fields"),10,2);
        }
      }
      // This displays the selections. Edit it to retrieve
      static function add_form_fields($taxonomy) {
        echo "Type " . self::get_select_html('text');
      }
      // This displays the selections. Edit it to retrieve your own terms however you retrieve them.
      static function get_select_html($selected) {
        $selected_attr = array('text'=>'','user'=>'','date'=>'','etc'=>'');
        $selected_attr[$selected] = ' selected="selected"';
        $html =<<<HTML
    <select id="tag-type" name="tag-type">
      <option value="text"{$selected_attr['text']}>Text</option>
      <option value="user"{$selected_attr['user']}>User</option>
      <option value="date"{$selected_attr['date']}>Date</option>
      <option value="etc" {$selected_attr['etc']}>Etc.</option>
    </select>
    HTML;
        return $html;
      }
        // This a table row with the drop down for an edit screen
        static function edit_form_fields($term, $taxonomy) {
        $selected = get_option("_term_type_{$taxonomy}_{$term->term_id}");
        $select = self::get_select_html($selected);
        $html =<<<HTML
    <tr class="form-field form-required">
      <th scope="row" valign="top"><label for="tag-type">Type</label></th>
      <td>$select</td>
    </tr>
    HTML;
        echo $html;
      }
      // These hooks are called after adding and editing to save $_POST['tag-term']
      static function term_type_update($term_id, $tt_id, $taxonomy) {
        if (isset($_POST['tag-type'])) {
          update_taxonomy_term_type($taxonomy,$term_id,$_POST['tag-type']);
        }
      }
    }
    

    Надеюсь, поможет.

    • 0
    • Привет еще раз Майк! Вы, конечно, кажетесь настоящим экспертом в этих вопросах, и это здорово, что вы здесь. Я экспериментировал с этим кодом и у меня есть несколько дополнительных вопросов. Прежде всего… Где в вашем примере хранятся данные настраиваемого поля для каждого термина таксономии? Во-вторых, не могли бы вы предоставить пример или код, который позволил бы добавить кнопку «выбрать медиа», которая, в свою очередь, открывает медиатеку для добавления/выбора изображения, а затем показывает соответствующее изображение. Я считаю, что это совершенно не задокументировано и ооочень полезно!

      • 0
    • @NetConstuctor.com: Спасибо за дополнение. Данные хранятся в wp_options таблице; это единственное место, где вы действительно можете без добавления новой метатаблицы таксономии. Что касается второго вопроса, то он ортогонален этому вопросу; т.е. речь идет о медиа-диалогах, а не о настраиваемых полях при вводе таксономии. Пожалуйста, задайте другой вопрос здесь, в WordPress Answers.

      • 0
    • @NetConstuctor.com: вы можете обнаружить, что это относится к вашему второму вопросу, хотя, вероятно, не так, как вы хотели услышать: core.trac.wordpress.org/ticket/13817

      • 0
    • @MikeSchinkel: Отличный ответ, спасибо. Дополнительная информация: если вам нужно что-то сделать при удалении термина, вот нужный вам хук delete_term .

      • 0
  2. Наткнулся на этот пост в своих поисках, вероятно, того же самого, и вскоре после этого наткнулся на этот плагин: Ultimate Taxonomy Manager. Я пока не одобряю его, но я пробовал его в тестовой среде и думаю, что он делает то, что вы ищете. При извлечении данных это кажется немного неуклюжим, но это может быть только я и мое понимание документации.

    • 0
  3. Я думаю, что сохранение настраиваемых мета-/дополнительных полей/настраиваемых полей таксономии в таблице параметров снижает производительность вашего сайта. Например, если ваш сайт имеет большой вес (много посетителей, много посещений), то для большого количества пользовательских таксономий таблица параметров будет огромной. и это увеличит время загрузки для запроса get_option() для других плагинов, или я думаю, что это сильно снизит производительность. мы должны сохранить ненужные вещи в таблице опций или увеличить строки в таблице опций.

    • 0
  4. Вы пытаетесь изменить таксономию, добавляя что-то, что таксономией не является, что только запутает.

    Вместо этого вам нужно будет добавить настраиваемое мета-поле к типу публикации статьи и сохранить URL-адреса и URL-адреса изображений в настраиваемых полях. Затем вы должны использовать код для добавления столбцов в functions.php для поиска этих настраиваемых полей в соответствующем сообщении, используяget_meta

    • 0

Оставить ответ

You must login to add an answer.