Pregunta

He estado tratando de agregar un campo a la Edición Rápida.De alguna manera funciona:se muestra y si se introduce un valor en el campo de entrada, el valor se guarda en un campo personalizado.Sin embargo, parece que no puede encontrar una manera de recuperar el valor del campo personalizado.Aquí es lo que tengo hasta el momento:

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
}

los valores ingresados se guardan con:

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']);
}

Como seguramente notado, esto es para un tipo de mensaje personalizado 'evento'.Sin embargo, yo no puedo recuperar los valores y rellenar los campos.AFAIK, esto implica inline-edit-post.js pero no puedo encontrar alguna forma de usar inlineEditPost para recuperar el valor de campo personalizado.Incluso el id del post está disponible en el ámbito de 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
}

Descargado el Campo Personalizado de plantillas plugin para diseccionar el código y se encontró que están redefiniendo las porciones de la inlineEditPost función, así que he pensado en hacer lo mismo.Sin embargo, parece que se está haciendo a través de una matriz en la que un duplicado se almacena.Si has resuelto esto, podrías compartir lo que se está utilizando para recuperar los valores para cada campo personalizado?

¿Fue útil?

Solución

Ok, lo tengo, aquí está el código:

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

y el código al principio de la admin.php archivo (que es el mismo archivo donde todo este código se encuentra):

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

Tan lejos y tan bien, tal vez hay otras maneras de hacerlo.Todavía deben lidiar con el ahorro, mientras que en volumen en el modo de edición.Se podría usar una mano allí también :) Espero que esto sea de utilidad para alguien.

Otros consejos

Este es no probado código.A ver si funciona para usted.Básicamente, como podrás leer a continuación, me globalizar $post, compruebe su CPT y, a continuación, recuperar el campo personalizado event desde el poste de la meta (de devolver un solo valor, según lo establecido por el "verdadero" en el último parámetro).

La única cosa que usted tiene que hacer es referencia $event en su jQuery así: {$event} a la salida el valor en el javascript.Aparecerá "estática", pero en realidad es dinámica.

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

P. S. He asignado el código HTML para una variable en PHP para hacer más fácil la lectura y permiten una rápida referencia $event en el jQuery.

Licenciado bajo: CC-BY-SA con atribución
scroll top