custom-post-types – Almacenamiento de revisiones de metadatos para tipo de publicación personalizada

Pregunta:

Almacenar metadatos para tipos de publicaciones personalizadas es fácil, solo necesita agregar una acción para 'save_post' con su método que maneja esto. En el que tiene entonces algo como lo siguiente para un campo que desea almacenar (con los controles de seguridad habituales, por supuesto):

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

Suficientemente simple. Sin embargo, no puedo entender qué debo hacer para que WordPress almacene revisiones para una publicación personalizada.

Tengo las revisiones habilitadas para el tipo de publicación personalizada y las revisiones funcionan para campos estándar como 'título'. Pero no funciona de forma predeterminada para los metadatos.

He buscado cómo otras personas hacen esto y casi todos dan el siguiente fragmento de código:

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

Pero esto no me funciona. No veo una nueva revisión en la lista de revisiones cuando cambio uno de los campos de metadatos. Veo una nueva revisión cuando cambio, por ejemplo, el título de la publicación personalizada.

No estoy familiarizado con algunos detalles de cómo se debe hacer esto en comparación con la forma en que normalmente almaceno los metadatos (ya sea debido a la falta de familiaridad con esta parte de la API o con las estructuras de datos). O me falta algo debido a este resfriado que tengo.

¿Alguien tiene un buen ejemplo de lo que debe hacer para almacenar revisiones de metadatos de publicaciones personalizados?

Respuesta:

Hay un filtro privado al que puede (pero no debe) acceder:

Definido en wp-includes / revision.php :

/**
 * 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 );

Entonces podrías escribir una función como

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

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

Donde meta_field es la clave para su meta que desea revisar y 'Meta Field' es lo que se muestra como el encabezado en la interfaz de usuario de revisiones.

Tenga en cuenta que esto es privado y su uso no está destinado a desarrolladores de temas o complementos. Se necesitarían soluciones más elaboradas para evitar este problema, y ​​es posible que esté mejor con un complemento que también pueda manejar esos problemas.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım