Distributor: Ampliación para admitir asociaciones de metadatos posteriores ...

Creado en 8 jul. 2020  ·  3Comentarios  ·  Fuente: 10up/distributor

Hola,

En las advertencias, hay una nota con respecto a las meta asociaciones de publicaciones, que especifica que estas no se "traerán" en las transferencias. Mientras estoy desarrollando una red de sitios con metadatos relacionales complejos (usando ACF), tengo dos preguntas:

  • La nota hace referencia a transferencias "push". ¿Ocurre lo mismo con las solicitudes de "extracción"?
  • ¿Hay un ejemplo disponible de la extensión "caso por caso" del complemento que se sugiere? Me encantaría intentarlo, ¡pero no sé por dónde empezar!

¡Gracias por adelantado!

Reporter Feedback question

Comentario más útil

Hola @ john-lynch-cp, tenemos una discusión interna sobre este tema, pero aún no hemos tenido una dirección final.

El valor meta guardado es el ID del objeto relacionado, que es diferente entre los sitios originales y remotos. Puede resolver este problema reemplazando el ID del objeto (el valor meta) por el correcto en el sitio remoto:

  • Para la publicación: tenemos dt_connection_map meta que se puede usar para recuperar la identificación de la publicación remota.
  • Para usuario y término, puede usar slug para encontrar el término correcto en el sitio remoto.

Puede preparar el meta de la publicación (cambiar la identificación de la publicación, agregar el término slug, agregar el inicio de sesión del usuario) conectando a dt_push_post_args y dt_subscription_post_args .

Para actualizar el metavalor correcto en el sitio remoto, conéctese a dt_process_distributor_attributes y dt_process_subscription_attributes .

Para sus preguntas:

La nota hace referencia a transferencias "push". ¿Ocurre lo mismo con las solicitudes de "extracción"?

La respuesta corta es no, empujar y tirar son diferentes. Si bien es posible lograr el mismo resultado de push usando pull, necesitará algunos pasos adicionales para preparar la meta de la publicación. Por push , debido a que eres el sitio original, puedes preparar metadatos adicionales antes de presionar. Pero no puedes hacer lo mismo con pull . El distribuidor usa el punto final de las publicaciones para obtener los datos de las publicaciones por pull , vea esto .

¿Hay un ejemplo disponible de la extensión "caso por caso" del complemento que se sugiere? Me encantaría intentarlo, ¡pero no sé por dónde empezar!

Por ejemplo, tiene un campo de taxonomía (usando ACF), llamado test_meta , que enlaza con la taxonomía project_category . Tenga en cuenta que el siguiente ejemplo está hecho solo con fines educativos, no es una solución óptima.

add_action( 'dt_push_post_args', 'prepare_meta', 10, 2 );

function prepare_meta( $post_body, $post ) {
    $term_id = get_post_meta( $post->ID, 'test_meta', true );
    if( $term_id ) {
        $term = get_term_by( 'id', $term_id, 'project_category');
        $post_body['project_category_slug'] = $term->slug;
    }

    return $post_body;
}

add_action( 'dt_process_distributor_attributes', 'set_meta', 10, 2 );

function set_meta( $post, $request ) {
    $term = get_term_by( 'slug', $request['project_category_slug'], 'project_category' );
    if ( ! $term ) {
        return;
    }
    update_post_meta( $post->ID, 'test_meta', $term->term_id );
}

Por cierto, hay un complemento creado por Novembit que es similar al ejemplo anterior pero más complicado: https://github.com/NovemBit/distributor-acf-addon. Tenga en cuenta que este complemento no es compatible con la versión actual de Distributor.

¡Espero que esto ayude!

Todos 3 comentarios

Hola @ john-lynch-cp, tenemos una discusión interna sobre este tema, pero aún no hemos tenido una dirección final.

El valor meta guardado es el ID del objeto relacionado, que es diferente entre los sitios originales y remotos. Puede resolver este problema reemplazando el ID del objeto (el valor meta) por el correcto en el sitio remoto:

  • Para la publicación: tenemos dt_connection_map meta que se puede usar para recuperar la identificación de la publicación remota.
  • Para usuario y término, puede usar slug para encontrar el término correcto en el sitio remoto.

Puede preparar el meta de la publicación (cambiar la identificación de la publicación, agregar el término slug, agregar el inicio de sesión del usuario) conectando a dt_push_post_args y dt_subscription_post_args .

Para actualizar el metavalor correcto en el sitio remoto, conéctese a dt_process_distributor_attributes y dt_process_subscription_attributes .

Para sus preguntas:

La nota hace referencia a transferencias "push". ¿Ocurre lo mismo con las solicitudes de "extracción"?

La respuesta corta es no, empujar y tirar son diferentes. Si bien es posible lograr el mismo resultado de push usando pull, necesitará algunos pasos adicionales para preparar la meta de la publicación. Por push , debido a que eres el sitio original, puedes preparar metadatos adicionales antes de presionar. Pero no puedes hacer lo mismo con pull . El distribuidor usa el punto final de las publicaciones para obtener los datos de las publicaciones por pull , vea esto .

¿Hay un ejemplo disponible de la extensión "caso por caso" del complemento que se sugiere? Me encantaría intentarlo, ¡pero no sé por dónde empezar!

Por ejemplo, tiene un campo de taxonomía (usando ACF), llamado test_meta , que enlaza con la taxonomía project_category . Tenga en cuenta que el siguiente ejemplo está hecho solo con fines educativos, no es una solución óptima.

add_action( 'dt_push_post_args', 'prepare_meta', 10, 2 );

function prepare_meta( $post_body, $post ) {
    $term_id = get_post_meta( $post->ID, 'test_meta', true );
    if( $term_id ) {
        $term = get_term_by( 'id', $term_id, 'project_category');
        $post_body['project_category_slug'] = $term->slug;
    }

    return $post_body;
}

add_action( 'dt_process_distributor_attributes', 'set_meta', 10, 2 );

function set_meta( $post, $request ) {
    $term = get_term_by( 'slug', $request['project_category_slug'], 'project_category' );
    if ( ! $term ) {
        return;
    }
    update_post_meta( $post->ID, 'test_meta', $term->term_id );
}

Por cierto, hay un complemento creado por Novembit que es similar al ejemplo anterior pero más complicado: https://github.com/NovemBit/distributor-acf-addon. Tenga en cuenta que este complemento no es compatible con la versión actual de Distributor.

¡Espero que esto ayude!

@ john-lynch-cp, ¿la respuesta anterior resuelve sus preguntas de manera que podamos cerrar este problema o tiene alguna pregunta de seguimiento?

Gracias por el seguimiento, feliz de que cierre esto ahora mismo. Creo que estamos mirando hacia un CMS diferente, ya que el desafío de la distribución podría tener más sentido con un enfoque diferente.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

jeffpaul picture jeffpaul  ·  5Comentarios

jeffpaul picture jeffpaul  ·  4Comentarios

dleeward picture dleeward  ·  7Comentarios

jeffpaul picture jeffpaul  ·  5Comentarios

jeffpaul picture jeffpaul  ·  3Comentarios