Intereting Posts
Добавить меню фильтров в список сообщений администратора (настраиваемого типа) для фильтрации сообщений по пользовательским значениям полей Изменить результаты поиска, чтобы рекламировать Как всегда добавлять элемент заголовка в изображения – даже если он пуст? сделать другой шаблон на последних шести опубликованных публикациях Цикл, который отображает PARENT PAGE & CHILD PAGE и выводит название и содержание GRANDCHILD PAGE Как получить значение meta на основе последнего идентификатора сообщения с именем группы по названию Используйте wp_enqueue_scripts из включенного php-файла Как хранить пользовательские данные в базе данных? Восстановить блог WordPress от неактивного имени домена Действие wp_before_admin_bar_render не работает в бэк-офисе Как показывать сообщения из нескольких типов сообщений в одном цикле? И отобразите их отдельно на одном шаблоне Условия заказа по term_order Как удалить раздел темы WordPress, который уже отключен Javascript перестает работать Часовой пояс по умолчанию жестко закодирован как UTC?

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

Я пытаюсь добавить поле в Quick Edit. Как-то он работает: он отображается, и если вы вводите значение в поле ввода, значение сохраняется в настраиваемом поле. Однако, похоже, не может найти способ получить значение настраиваемого поля. Вот что я получил до сих пор:

add_action('quick_edit_custom_box', 'ilc_quickedit_show', 10, 2); function ilc_quickedit_show( $col, $type ) { if( $type != 'event' ) return; ?> <fieldset class="inline-edit-col-left"> <div class="inline-edit-col"> <div class="inline-edit-group"> <label for="eventdate" style="font: italic 12px Georgia, serif;">Event Date</label> <span class="input-text-wrap"> <input type="text" name="eventdate" id="eventdate" size="10" value=""> </span> </div> </div> </fieldset> <?php } 

введенные значения сохраняются с использованием:

 add_action('save_post','ilc_quickedit_save',10,3); function ilc_quickedit_save($post_id, $post) { if( $post->post_type != 'event' ) return; update_post_meta($post_id, 'Event Date', $_POST['eventdate']); } 

Как вы, конечно же, заметили, это для персонализированного сообщения типа «событие». Однако я не могу получить значения и заполнить поля. AFAIK, это включает inline-edit-post.js, но я не могу найти способ использовать inlineEditPost для получения значения настраиваемого поля. Даже идентификатор сообщения доступен в области JavaScript

 add_action('admin_head-edit.php', 'ilc_quickedit_get'); function ilc_quickedit_get() { ?> <script type="text/javascript"> jQuery(document).ready(function() { jQuery('a.editinline').live('click', function() { var id = inlineEditPost.getId(this); alert("Post id: " + id); }); }); </script> <?php } 

Загрузили плагин Custom Template для анализа кода и обнаружили, что они переопределяют части функции inlineEditPost, поэтому я подумал о том, чтобы сделать то же самое. Однако они, похоже, делают это через массив опций, где хранится дубликат. Если вы решили это, можете ли вы поделиться тем, что используете, чтобы получить значения для каждого настраиваемого поля?

Хорошо, я понял, вот код:

 function ilc_quickedit_save($post_id, $post) { if( $post->post_type != 'evento' ) return; if (isset($_POST['is_quickedit'])) update_post_meta($post_id, 'eventdate', $_POST['eventdate']); } function ilc_quickedit_get() { $html = '<script type="text/javascript">'; $html .= 'jQuery(document).ready(function() {'; $html .= 'jQuery("a.editinline").live("click", function() {'; $html .= 'var id = inlineEditPost.getId(this);'; $html .= 'jQuery.post("' . THEME_URI . '/library/admin/admin.php",{ post_id: id, modo: "ajaxget" },'; $html .= 'function(data){ jQuery("#eventdate").val(data); }'; $html .= ');});});'; $html .= '</script>'; echo $html; } 

и код в начале файла admin.php (который является тем же файлом, где находится весь этот код):

 if($_POST['modo'] == 'ajaxget'){ require_once('../../../../../wp-blog-header.php'); $post_id = $_POST['post_id']; echo get_post_meta($post_id, 'eventdate', true); return; } 

Пока все хорошо, возможно, есть и другие способы сделать это. Все еще нужно иметь дело с сохранением в режиме массового редактирования. Могли бы тоже использовать руку 🙂 Надеюсь, это полезно для кого-то.

Это непроверенный код. Посмотрите, работает ли это для вас. В основном, как вы прочтете ниже, я глобализую сообщение $post , проверяю ваш CPT, а затем извлекаю настраиваемое полевое event из метаданных сообщения (возвращая одно значение – как установлено «true» в последнем параметре).

Единственное, что вам нужно сделать, это связать $event в вашем jQuery так: {$event} чтобы вывести значение в javascript. Он будет выглядеть «статическим», но на самом деле он динамичен.

 add_action('admin_head-edit.php', 'ilc_quickedit_get'); function ilc_quickedit_get() { global $post; if ( $post->post_type != "event" ) return; $event = get_post_meta( $post->ID, 'event', true ); // gets a *single* option from the postmeta table $html = <<<HTML <script type="text/javascript"> jQuery(document).ready(function() { jQuery('a.editinline').live('click', function() { // do something with {$event} }); }); </script> HTML; echo $html; } 

PS Я назначил ваш HTML-код переменной PHP, чтобы упростить ее чтение и позволить вам быстро ссылаться на $event в jQuery.