Domanda

Ho cercato di aggiungere un campo per Quick Edit. In qualche modo funziona: viene visualizzato e se si immette un valore nel campo di immissione, il valore viene salvato in un campo personalizzato. Tuttavia, non riesco a trovare un modo per recuperare il valore del campo personalizzato. Ecco quello che ho ottenuto finora:

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
}

valori immessi vengono salvati utilizzando:

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

Come sicuramente notato, questo è per 'evento' un tipo di messaggio personalizzato. Tuttavia, non riesco a recuperare i valori e compilare i campi. Per quanto ne so, si tratta in linea-edit-post.js ma non riesco a trovare un modo per utilizzare inlineEditPost per recuperare il valore del campo personalizzato. Anche l'id post è disponibile nel campo di applicazione 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
}

scaricato il modello campo personalizzato plugin per sezionare il codice e ha scoperto che essi stanno ridefinendo porzioni della funzione inlineEditPost, così ho pensato di fare la stessa cosa. Tuttavia, essi sembrano essere farlo attraverso una serie opzioni in cui è memorizzato un duplicato. Se avete risolto questo, potrebbe condividere ciò che si sta utilizzando per recuperare i valori per ogni campo personalizzato?

È stato utile?

Soluzione

Ok, ho capito, ecco il codice:

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

e il codice all'inizio del file admin.php (che è lo stesso file in cui si trova tutto questo codice):

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

Fin qui tutto bene, forse ci sono altri modi per farlo. Ancora bisogno di trattare con il risparmio, mentre alla rinfusa modalità di modifica. Potrebbe utilizzare una mano anche lì :) Spero che questo è utile per qualcuno.

Altri suggerimenti

Questa è non testati del codice. Guarda se va bene per te. In sostanza, come avrete letto di sotto, ho globalizzare $post, assegno per il CPT, e quindi recuperare il event campo personalizzato da meta della posta (restituire un singolo valore - come stabilito dal "vero" nel l'ultimo parametro) <. / p>

L'unica cosa che dovete fare è $event riferimento nel jQuery in questo modo: {$event} per l'emissione del valore nel javascript. Sarà apparire "statica", ma in realtà è dinamica.

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. Ho assegnato il codice HTML per una variabile PHP per rendere più facile la lettura e consentono di rapidamente $event riferimento nel jQuery.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top