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

wordpress.stackexchange https://wordpress.stackexchange.com/questions/8883

Вопрос

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

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, но я не могу найти способ использовать InlineDitPost для извлечения пользовательского значения поля. Даже идентификатор сообщения доступен в области 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
}

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top