Frage

Ich habe versucht, ein Feld zum schnellen Bearbeiten hinzuzufügen. Irgendwie funktioniert es: Es wird angezeigt und wenn Sie einen Wert in das Eingabefeld eingeben, wird der Wert in ein benutzerdefiniertes Feld gespeichert. Ich kann jedoch keinen Weg finden, um den Wert des benutzerdefinierten Feldes abzurufen. Hier ist, was ich so weit habe:

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
}

Die eingegebenen Werte werden 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, gilt dies für einen benutzerdefinierten Post -Typ -Ereignis. Ich kann die Werte jedoch nicht abrufen und die Felder bevölkern. Afaik, dies beinhaltet Inline-edit-post.js, aber ich kann keine Möglichkeit finden, InlineEditpost zu verwenden, um den benutzerdefinierten Feldwert abzurufen. Sogar die Post -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
}

Laden Sie das benutzerdefinierte Feldvorlagen -Plugin herunter, um den Code zu sezieren, und stellte fest, dass sie Teile der InlineEditPost -Funktion neu definieren. Deshalb habe ich darüber nachgedacht, dasselbe zu tun. Sie scheinen es jedoch durch ein Options -Array zu tun, in dem ein Duplikat gespeichert wird. Wenn Sie dies gelöst haben, können Sie teilen, was Sie verwenden, um die Werte für jedes benutzerdefinierte Feld abzurufen?

War es hilfreich?

Lösung

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 der Code am Anfang der Datei admin.php (die dieselbe Datei ist, in der sich all dieser 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 andere Möglichkeiten, es zu tun. Sie müssen sich im Bulk -Bearbeitungsmodus noch mit Speichern befassen. Könnte dort auch eine Hand verwenden :) Ich hoffe, das ist nützlich für jemanden.

Andere Tipps

Das ist ungetestet Code. Sehen Sie, ob es für Sie funktioniert. Grundsätzlich, wie Sie unten lesen werden, globalisiere ich im Grunde $post, Überprüfen Sie nach Ihrem CPT und rufen Sie dann das benutzerdefinierte Feld ab event Aus dem Meta des Posts (Rückgabe eines einzelnen Wertes - wie durch die "True" im letzten Parameter festgelegt).

Das einzige, was Sie tun müssen, ist Referenz $event in deiner jQuery wie so: {$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;
}

Ps Ich habe Ihren HTML -Code einer PHP -Variablen zugewiesen, um das Lesen zu erleichtern und Sie schnell zu referenzieren $event in der jQuery.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top