Intereting Posts
После обновления WP продолжает возиться о более новой версии. Зачем? Каков наилучший способ создания пользовательской страницы из плагина? get_posts () и WP_query ограничивает условия «И» максимум до 6 для запросов метаданных в WordPress Как исключить почтовые форматы из последних сообщений WordPress в виджетах вкладок Отображать изображение из внешней rss-ленты на wordpress без плагинов Как загрузить файл css после определенного файла css Можно ли прочитать результат, если wp_update_user или update_user_meta не удается? Как разрешить получение элементов панели управления, созданных с помощью интерфейса CPT в локальном хосте, на моем сайте? Сделать все изображения отображаемыми в single.php определенного размера Не удается сохранить сообщение WordPress с надписью «/ etc /» Добавить мета значение, если администратор, редактор или любой другой пользователь открыл сообщение в режиме редактирования if is $ current_user-> role admin, а затем скрыть пользователя определенной роли из списка пользователей Хостинг моего собственного сайта – плюсы и минусы? Bulk Image Uploader для создания нового сообщения с каждого изображения Как изменить комментарии metox на экране редактирования сообщений в WordPress?

Сохранение значения пользовательского термина в базе данных в новой таблице

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

Может ли кто-нибудь увидеть, если что-то не так с этим? (Я уверен, что кое-что я пропустил)

add_action ( 'movie_edit_form_fields', 'movie_access_metabox' ); add_action ( 'edited_movie', 'save_movie_data' ); function movie_access_metabox($movie) { global $wpdb; $value = $wpdb->get_var('select meta_value from wp_termmeta where meta_value='.$movie->meta_value); ?> <tr> <th scope="row" valign="top"><label><?php _e('Movie year') ?></label></th> <td> <input type="text" id="year" name="year" value="" <?php echo $value ?>> </td> </tr> <?php } function save_movie_data($term_id) { global $wpdb; $wpdb->termmeta = 'wp_termmeta'; if (isset($_POST['year'])) { $wpdb->delete('wp_termmeta', array('meta_key' => '_year', 'term_id' => $term_id)); $wpdb->insert('wp_termmeta', array('term_id' => $term_id, ',meta_key' => '_year', 'meta_value' => $value)); }else{ $wpdb->delete('wp_termmeta', array('meta_key' => '_year', 'term_id' => $term_id)); } } 

ОБНОВЛЕНИЕ # 1:

Если вы не сможете получить ответ от @Oleg Butuzov, я поместил еще немного времени на свой первоначальный ответ и добрался до сцены, где он сохраняет вход пользователей в db. Теперь проблема заключается в том, что она только может сохранить одно значение, значение может быть обновлено, но только одна строка может быть добавлена ​​за раз. Если у кого-то есть идеи, пожалуйста, приведите их вперед, и я продолжу обновлять код, поэтому, надеюсь, может помочь кому-то еще в будущем.

ОБНОВЛЕНИЕ # 2:

* Удален неправильный код из сообщения.

Оказывается, основные причины, по которым я смог добавить только одно значение, были связаны с тем, что я использовал только delete и insert – без update и не использовал AUTO_INCREMENT для создания схемы termmeta . Полный рабочий ответ приведен ниже.

короткая exmaple, как я это делаю … (имена таблиц не совсем правильные.)

в этом примере я пытаюсь сохранить переменную _description $ _POST.

 add_action ( 'edited_term', 'custom_edited_term', 10, 3); function custom_edited_term($term_id, $tt_id, $taxonomy){ if ( defined('DOING_AJAX') || defined('DOING_CRON') ) return; $_POST = stripslashes_deep($_POST); if (isset($_POST['_description']) && trim($_POST['_description']) != ''){ update_term_meta($term_id, '_description', trim($_POST['_description'])); } else { delete_term_meta($term_id, '_description'); } } 

Термины Мета-функции

 if (!function_exists('add_term_meta')){ function add_term_meta($term_id, $meta_key, $meta_value, $unique = false) { if ( $the_term = wp_is_term_revision($term_id) ) $term_id = $the_term; return add_metadata('term', $term_id, $meta_key, $meta_value, $unique); } } if (!function_exists('delete_term_meta')){ function delete_term_meta($term_id, $meta_key, $meta_value = '') { return delete_metadata('term', $term_id, $meta_key, $meta_value); } } if (!function_exists('get_term_meta')){ function get_term_meta($term_id, $key, $single = false) { return get_metadata('term', $term_id, $key, $single); } } if (!function_exists('update_term_meta')){ function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = false) { return update_metadata('term', $term_id, $meta_key, $meta_value, $prev_value); } } 

(вы можете поместить его в некоторую функцию init или functions.php – до вас)

 global $wpdb; $wpdb->tables[] = 'termmeta'; $wpdb->termmeta = $wpdb->prefix.'termmeta'; 

сам стол

 $wpdb->query("CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}termmeta` ( `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `term_id` bigint(20) unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) DEFAULT NULL, `meta_value` longtext, PRIMARY KEY (`meta_id`), KEY `meta_key` (`meta_key`), KEY `term_id` (`term_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1"); 

Вот мой последний код, который отвечает на мой вопрос. Он позволяет пользователю вводить значение через текстовое поле, которое затем добавляется, заменяется или удаляется из базы данных (если пользователь вводит «delete»). Он также получает значение и отображает его в поле ввода, если он есть.

 function movie_edit_add_year($movie){ global $wpdb; $v = $wpdb->get_var("SELECT meta_value FROM wp_termmeta where term_id =".$movie->term_id); function has_meta_value($p){ return isset($p) ? $p : ''; } ?> <tr> <th><label>Movie year</label></th> <td> <input type="text" name="year" style="width:5%;" value="<?php echo has_meta_value($v); ?>" > </td> </tr> <?php } add_action( 'edited_movie', 'save_year_to_movie'); function save_year_to_movie( $term_id ) { global $wpdb; $table = $wpdb->prefix . 'termmeta'; $val = intval($_POST['year']); $var = $wpdb->get_var("SELECT meta_id FROM wp_termmeta where term_id=".$term_id); if ($_POST['year'] == 'delete') { $wpdb->delete($table, array('term_id' => $term_id)); } elseif (!empty($var)) { $wpdb->update($table, array('term_id' => $term_id, 'meta_key' => 'year', 'meta_value' => $val), array('term_id' => $term_id), array('%d', '%s', '%d') ); } else { $wpdb->insert($table, array('term_id' => $term_id, 'meta_key' => 'year', 'meta_value' => $val), array('%d', '%s', '%d')); } }