Добавление пользовательского поля к вводу таксономии: панель
-
16-10-2019 - |
Вопрос
Я хочу достичь того, что, как я понял, было бы довольно просто для достижения, но, похоже, нет реальных примеров для достижения моих потребностей.
По сути, у меня есть пользовательский тип «статей» пост «статей» для этого пользовательского типа Post I, я имею новую таксономию, которую я зарегистрировал, которая была создана, чтобы можно было добавить исходные публикации.
Моя цель состояла в том, чтобы иметь возможность добавить статью через этот пользовательский тип поста, а затем выбрать применимую «публикацию источника» из списка терминов, чтобы я мог показать, откуда появилась статья.
Теперь проблема, с которой я столкнулся, кажется проста ... все, что я пытаюсь сделать, это добавить несколько дополнительных полей на страницу, где вы можете ввести каждый термин таксономии. В этом случае я хотел бы добавить поле для «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;
}
Решение
Привет @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']);
}
}
}
Надеюсь, поможет.
Другие советы
Наткнулся на этот пост в моем стремлении к тому же, и вскоре после этого наткнулся на эту пробку:Ultimate Taxomonomy Manager Анкет Я пока не одобряю это, но я попробовал это в тестовой среде и думаю, что это делает то, что вы ищете. При извлечении данных это кажется немного неуклюжим, но это может быть просто я и мое понимание документации.
Я думаю, что сохранение пользовательской таксономической мета/дополнительных полей/пользовательских полей в таблице опций - это то, что убивает производительность вашего сайта. Например, если ваш сайт тяжелый (много посетителей, много хитов), то для большого количества пользовательской таксономии таблица опционов будет огромным. И это увеличит время загрузки для запроса get_option () для других плагинов, или я думаю, что это будет много затруднить производительность. Мы должны сохранить ненужные вещи в таблице опций или увеличить строки в таблице опций.
Вы пытаетесь изменить таксономию, добавив что -то, что не таксономия, которая только запутает.
Вместо этого вам нужно будет добавить пользовательскую мета -поле в тип сообщения статьи и сохранить URL -адреса и URL -адреса изображения в пользовательских полях. Затем вы будете использовать код для добавления столбцов в functions.php для поиска этих пользовательских полей в соответствующем сообщении, используя get_meta
Более простым и более легким способом будет: