it-swarm.com.de

Triggern Sie das Dialogfeld "Nicht gespeicherte Änderungen" für benutzerdefinierte Post-Meta-Änderungen

Ich verwende einen benutzerdefinierten Beitragstyp mit benutzerdefinierten Metafeldern, aber das automatische Speichern und das Dialogfeld "Nicht gespeicherte Änderungen" scheinen für diese benutzerdefinierten Metafelder nicht ausgelöst zu werden. Das automatische Speichern ist für mich nicht so wichtig wie der nicht gespeicherte Änderungsdialog. Gibt es eine Möglichkeit, dies auszulösen?

function add_meta_boxes() {
    add_meta_box('places_location', __('Location'), array(&$this, 'location_box'), 'place', 'normal', 'high');
}

function location_box($post) {
    wp_nonce_field(plugin_basename(__FILE__), 'places_location_nonce');

    $lat = get_post_meta($post->ID, 'places_lat', true);
    $lng = get_post_meta($post->ID, 'places_lng', true);

    ?>
    <p>
        <label>
            Latitude:
            <input name="places_lat" value="<?php echo esc_attr($lat); ?>" />
        </label>
        <label>
            Longitude:
            <input name="places_lng" value="<?php echo esc_attr($lng); ?>" />
        </label>
    </p>
    <?php
}

function save_place($id) {
    // skip unverified location nonces
    if(!wp_verify_nonce($_POST['places_location_nonce'], plugin_basename(__FILE__))) return;

    // skip autosave calls
    // commenting this out still doesn't trigger saving these fields on autosave
    //if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // update our custom post meta
    update_post_meta($id, 'places_lat', (float)$_POST['places_lat']);
    update_post_meta($id, 'places_lng', (float)$_POST['places_lng']);
}
2
Kevin

Der Code betrachtet den TinyMCE-Editor oder das Titel- und Inhaltsfeld nur, wenn der Editor ausgeblendet ist:

window.onbeforeunload = function(){
    var mce = typeof(tinyMCE) != 'undefined' ? tinyMCE.activeEditor : false, title, content;

    if ( mce && !mce.isHidden() ) {
        if ( mce.isDirty() )
            return autosaveL10n.saveAlert;
    } else {
        title = $('#post #title').val(), content = $('#post #content').val();
        if ( ( title || content ) && title + content != autosaveLast )
            return autosaveL10n.saveAlert;
    }
};

Sie können den onbeforeunload Handler durch Ihren eigenen ersetzen (stellen Sie sicher, dass Sie die vorhandene Funktionalität einbeziehen). Oder mit dem Status isDirty() des TinyMCE-Editors und dem Wert autosaveLast spielen?

2
Jan Fabry

Ich habe dieses Problem mit diesem hervorragenden jQuery-Plugin gelöst, das den Dirty-Status eines Formulars überprüft. Es enthält Methoden zum Überprüfen von hinzugefügten/entfernten/geänderten Feldern über Javascript. Es tritt total in den Arsch!

Ich habe den "AUTOSAVE" (noch) nicht gehandhabt. Ich hoffe, jemand findet das nützlich.

0