Question

J'ai essayé d'ajouter un champ à Quick Edit. D'une certaine façon cela fonctionne: il est affiché et si vous entrez une valeur dans le champ de saisie, la valeur est enregistrée dans un champ personnalisé. Cependant, ne semblent pas trouver un moyen de récupérer la valeur du champ personnalisé. Voici ce que je suis arrivé à ce jour:

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
}

Les valeurs saisies sont enregistrées à l'aide:

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

Comme vous l'avez sûrement remarqué, ceci est pour « événement » un type de poste personnalisé. Cependant, je ne peux pas récupérer les valeurs et remplir les champs. Autant que je sache, cela implique inline-edit-post.js, mais je ne peux pas trouver un moyen d'utiliser inlineEditPost pour récupérer la valeur du champ personnalisé. Même l'id poste est disponible dans le champ 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
}

téléchargé le plug-in champ modèle personnalisé pour disséquer le code et a constaté qu'ils sont en train de redéfinir des portions de la fonction inlineEditPost, donc je pensais faire la même chose. Cependant, ils semblent le faire grâce à un éventail d'options où un duplicata est stocké. Si vous avez résolu ce, pourriez-vous partager ce que vous utilisez pour récupérer les valeurs pour chaque champ personnalisé?

Était-ce utile?

La solution

Ok, je l'ai, voici le code:

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

et le code au début du fichier admin.php (qui est le même fichier où tout ce code se trouve):

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

Jusqu'à présent, si bon, peut-être il y a d'autres façons de le faire. Encore faut-il faire face à l'enregistrement en mode d'édition en vrac. On pourrait utiliser une main là aussi :) Espérons que cela est utile pour quelqu'un.

Autres conseils

est le code non testé . Voir si cela fonctionne pour vous. Au fond, comme vous allez lire ci-dessous, je globaliser $post, chèque pour votre CPT, puis récupérer le champ personnalisé event de la méta du poste (retour d'une seule valeur - fixée par le « vrai » dans le dernier paramètre) <. / p>

La seule chose que vous avez à faire est $event de référence dans votre jQuery comme ceci: {$event} pour sortir la valeur dans le javascript. Il va apparaître « statique », mais en réalité il est dynamique.

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. J'affecté votre code HTML à une variable PHP pour le rendre plus facile à lire et à vous permettre de $event de référence rapidement dans le jQuery.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top