it-swarm.com.de

Werte von benutzerdefinierten Feldern im Schnellbearbeitungsmodus abrufen

Ich habe versucht, ein Feld zur Schnellbearbeitung hinzuzufügen. Irgendwie funktioniert es: Es wird angezeigt und wenn Sie einen Wert in das Eingabefeld eingeben, wird der Wert in einem benutzerdefinierten Feld gespeichert. Es scheint jedoch nicht möglich zu sein, den Wert des benutzerdefinierten Felds abzurufen. Folgendes habe ich bisher bekommen:

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
}

eingegebene Werte werden gespeichert mit:

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

Wie Sie sicherlich bemerkt haben, handelt es sich hierbei um einen benutzerdefinierten Beitrag vom Typ "Ereignis". Ich kann die Werte jedoch nicht abrufen und die Felder nicht ausfüllen. AFAIK, dies betrifft inline-edit-post.js, aber ich kann keine Möglichkeit finden, inlineEditPost zum Abrufen des benutzerdefinierten Feldwerts zu verwenden. Sogar die Beitrags-ID ist im JavaScript-Bereich verfügbar

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
}

Ich habe das Plug-in für benutzerdefinierte Feldvorlagen heruntergeladen, um den Code zu zerlegen, und festgestellt, dass sie Teile der Funktion inlineEditPost neu definieren. Daher habe ich mir überlegt, dasselbe zu tun. Sie scheinen dies jedoch über ein Options-Array zu tun, in dem ein Duplikat gespeichert ist. Wenn Sie dieses Problem gelöst haben, können Sie uns mitteilen, was Sie zum Abrufen der Werte für die einzelnen benutzerdefinierten Felder verwenden.

3
Elliot

Ok, ich habe es verstanden, hier ist der 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;
}

und den Code am Anfang der Datei admin.php (das ist dieselbe Datei, in der sich der gesamte Code befindet):

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

So weit so gut, vielleicht gibt es noch andere Möglichkeiten. Ich muss mich noch mit dem Speichern befassen, während ich mich im Massenbearbeitungsmodus befinde. Könnte dort auch eine Hand gebrauchen :) Hoffe, das ist nützlich für jemanden.

2
Elliot

Dies ist ungetesteter Code. Sehen Sie, ob es bei Ihnen funktioniert. Wie Sie weiter unten lesen werden, globalisiere ich $post, überprüfe Ihren CPT und rufe dann das benutzerdefinierte Feld event aus dem Meta des Posts ab (wobei ein einzelner Wert zurückgegeben wird - wie durch "true" im letzten Parameter festgelegt).

Das einzige, was Sie tun müssen, ist, $event in Ihrer jQuery wie folgt zu referenzieren: {$event}, um den Wert in das Javascript auszugeben. Es wird "statisch" erscheinen, aber in Wirklichkeit ist es dynamisch.

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. Ich habe Ihren HTML-Code einer PHP -Variablen zugewiesen, um das Lesen zu vereinfachen und einen schnellen Verweis auf $event in der jQuery zu ermöglichen.

0
Zack