Distributor: Estendendo para oferecer suporte a pós-meta associações ...

Criado em 8 jul. 2020  ·  3Comentários  ·  Fonte: 10up/distributor

Oi,

Nas advertências, há uma nota a respeito das pós-meta associações, especificando que elas não serão "trazidas" nas transferências. Como estou desenvolvendo uma rede de sites com metadados relacionais complexos (usando ACF), tenho duas perguntas:

  • A nota faz referência a transferências "push". O mesmo acontece com as solicitações de "pull"?
  • Existe um exemplo disponível da extensão "caso a caso" do plugin que é sugerido? Gostaria de experimentar, mas não sei por onde começar!

Desde já, obrigado!

Reporter Feedback question

Comentários muito úteis

Olá @ john-lynch-cp, temos algumas discussões internas sobre este tópico, mas ainda não tivemos uma direção final.

O metavalor salvo é o ID do objeto relacionado, que é diferente entre os sites original e remoto. Você pode resolver esse problema substituindo o ID do objeto (o valor meta) pelo correto no site remoto:

  • Para postagem: temos dt_connection_map meta que pode ser usado para recuperar o id do post remoto.
  • Para usuário e termo, você pode usar slug para encontrar o termo correto no site remoto.

Você pode preparar o post meta (alterar o id do post, adicionar termo slug, adicionar login do usuário) conectando dt_push_post_args e dt_subscription_post_args .

Para atualizar o meta valor correto no site remoto, conecte dt_process_distributor_attributes e dt_process_subscription_attributes .

Para suas perguntas:

A nota faz referência a transferências "push". O mesmo acontece com as solicitações de "pull"?

A resposta curta é não, empurrar e puxar são diferentes. Embora seja possível obter o mesmo resultado de push usando pull, você precisará de algumas etapas adicionais para preparar a pós-meta. Por push , porque você é o site original, você pode preparar metadados adicionais antes de enviar. Mas você não pode fazer o mesmo com pull . O distribuidor usa o endpoint de postagens para obter os dados de postagem de pull , veja isto .

Existe um exemplo disponível da extensão "caso a caso" do plugin que é sugerido? Gostaria de experimentar, mas não sei por onde começar!

Por exemplo, você tem um campo de taxonomia (usando ACF), denominado test_meta , que se vincula à taxonomia project_category . Observe que o exemplo abaixo é feito apenas para fins educacionais, não é uma solução ideal.

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

Aliás, existe um addons feito pela Novembit que é semelhante ao exemplo acima, mas mais complicado: https://github.com/NovemBit/distributor-acf-addon. Observe que este complemento não é compatível com a versão atual do Distribuidor.

Espero que esta ajuda!

Todos 3 comentários

Olá @ john-lynch-cp, temos algumas discussões internas sobre este tópico, mas ainda não tivemos uma direção final.

O metavalor salvo é o ID do objeto relacionado, que é diferente entre os sites original e remoto. Você pode resolver esse problema substituindo o ID do objeto (o valor meta) pelo correto no site remoto:

  • Para postagem: temos dt_connection_map meta que pode ser usado para recuperar o id do post remoto.
  • Para usuário e termo, você pode usar slug para encontrar o termo correto no site remoto.

Você pode preparar o post meta (alterar o id do post, adicionar termo slug, adicionar login do usuário) conectando dt_push_post_args e dt_subscription_post_args .

Para atualizar o meta valor correto no site remoto, conecte dt_process_distributor_attributes e dt_process_subscription_attributes .

Para suas perguntas:

A nota faz referência a transferências "push". O mesmo acontece com as solicitações de "pull"?

A resposta curta é não, empurrar e puxar são diferentes. Embora seja possível obter o mesmo resultado de push usando pull, você precisará de algumas etapas adicionais para preparar a pós-meta. Por push , porque você é o site original, você pode preparar metadados adicionais antes de enviar. Mas você não pode fazer o mesmo com pull . O distribuidor usa o endpoint de postagens para obter os dados de postagem de pull , veja isto .

Existe um exemplo disponível da extensão "caso a caso" do plugin que é sugerido? Gostaria de experimentar, mas não sei por onde começar!

Por exemplo, você tem um campo de taxonomia (usando ACF), denominado test_meta , que se vincula à taxonomia project_category . Observe que o exemplo abaixo é feito apenas para fins educacionais, não é uma solução ideal.

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

Aliás, existe um addons feito pela Novembit que é semelhante ao exemplo acima, mas mais complicado: https://github.com/NovemBit/distributor-acf-addon. Observe que este complemento não é compatível com a versão atual do Distribuidor.

Espero que esta ajuda!

@ john-lynch-cp a resposta acima resolve suas dúvidas de forma que possamos resolver este problema ou você tem alguma pergunta complementar?

Obrigado pelo acompanhamento, feliz por encerrar isso agora. Acho que estamos buscando um CMS diferente, pois o desafio da distribuição pode fazer mais sentido com uma abordagem diferente.

Esta página foi útil?
0 / 5 - 0 avaliações