it-swarm.com.de

Speichern von Überarbeitungen von Metadaten für einen benutzerdefinierten Beitragstyp

Das Speichern von Metadaten für benutzerdefinierte Beitragstypen ist einfach. Sie müssen lediglich eine Aktion für 'save_post' mit Ihrer Methode hinzufügen, die dies behandelt. In dem hast du dann so etwas wie folgendes für ein Feld, das du speichern möchtest (mit den üblichen Sicherheitsüberprüfungen natürlich):

update_post_meta( $post_id, '_description', $_POST['_description'] );

Einfach genug. Ich kann jedoch nicht herausfinden, was ich tun muss, damit WordPress Revisionen für einen benutzerdefinierten Beitrag speichert.

Ich habe Überarbeitungen für den benutzerdefinierten Beitragstyp aktiviert und Überarbeitungen funktionieren für Standardfelder wie "Titel". Bei Metadaten funktioniert dies jedoch standardmäßig nicht.

Ich habe nach anderen Personen gesucht und fast alle geben den folgenden Codeausschnitt an:

function my_plugin_save_post( $post_id, $post ) {

    if ( $parent_id = wp_is_post_revision( $post_id ) ) {

        $parent  = get_post( $parent_id );
        $my_meta = get_post_meta( $parent->ID, 'my_meta', true );

        if ( false !== $my_meta )
              add_metadata( 'my_custom_post', $post_id, 'my_meta', $my_meta );
    }

} add_action( 'save_post', 'my_plugin_save_post' );

Aber das funktioniert bei mir nicht. Ich sehe keine neue Revision in der Revisionsliste, wenn ich eines der Metadatenfelder ändere. Ich sehe eine neue Revision, wenn ich zum Beispiel den Titel des benutzerdefinierten Beitrags ändere.

Ich bin entweder nicht mit einigen Details vertraut, wie dies im Vergleich zu der Art und Weise, in der ich Metadaten normalerweise speichere (entweder weil ich mit diesem Teil der API oder den Datenstrukturen nicht vertraut bin). Oder ich vermisse etwas wegen dieser Erkältung, die ich habe.

Hat jemand ein gutes Beispiel dafür, was Sie tun müssen, um Revisionen für benutzerdefinierte Post-Metadaten zu speichern?

6
FuzzyYoda

Es gibt einen privaten Filter, auf den Sie zugreifen können (aber nicht dürfen):

In wp-includes/revision.php definiert :

/**
 * Filter the list of fields saved in post revisions.
 *
 * Included by default: 'post_title', 'post_content' and 'post_excerpt'.
 *
 * Disallowed fields: 'ID', 'post_name', 'post_parent', 'post_date',
 * 'post_date_gmt', 'post_status', 'post_type', 'comment_count',
 * and 'post_author'.
 *
 * @since 2.6.0
 * @since 4.5.0 The `$post` parameter was added.
 *
 * @param array $fields List of fields to revision. Contains 'post_title',
 *                      'post_content', and 'post_excerpt' by default.
 * @param array $post   A post array being processed for insertion as a post revision.
 */
$fields = apply_filters( '_wp_post_revision_fields', $fields, $post );

Sie könnten also eine Funktion wie schreiben

add_filter( '_wp_post_revision_fields', 'add_my_own_fields', 10, 2 );

function add_my_own_fields( $fields, $post ) {
    $fields['meta_field'] = 'Meta Field';
}

Wobei meta_field der Schlüssel für Ihr Meta ist, das Sie überarbeiten möchten, und 'Meta Field' als Überschrift in der Benutzeroberfläche für Überarbeitungen angezeigt wird.

Bitte beachte, dass dies privat ist und die Verwendung nicht für Theme- oder Plugin-Entwickler bestimmt ist. Um dieses Problem zu vermeiden, sind aufwendigere Lösungen erforderlich. Mit einem Plug-in, das diese Probleme ebenfalls bewältigt, sind Sie möglicherweise besser dran.

1
phatskat