✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Atualizando eventos subsequentes em postagens do calendário de eventos

10

Este é um caso realmente cheio de nuances, mas achei que valeria a pena tentar generalizar para um post para quem pode estar trabalhando com eventos futuros com o Calendário de Eventos da Tribo Moderna.

Digamos que você esteja configurando algum evento recorrente e dentro do corpo do evento (ou, mais apropriadamente, o post_content) você queira dizer algo como:

Já se passaram N anos desde que [este evento] ocorreu.

O fato é que cada evento subsequente será obviamente um ano maior do que o anterior. Portanto, você não pode necessariamente codificar o valor nos eventos sem que ele seja colocado no conteúdo do post de cada evento.

Então, qual é uma maneira de lidar com isso?

Atualizando eventos subsequentes

Como na maioria das coisas, isso dependerá de como sua base de código está configurada, mas supondo que você esteja trabalhando com eventos em série, não é tão ruim.

Para este post, estou supondo:

  1. você tem eventos configurados de forma que você tenha o primeiro evento de uma série e, em seguida, eventos subsequentes),
  2. você se sente confortável executando consultas básicas usando $wpdb ,
  3. você se sente confortável com expressões regulares básicas,
  4. você está familiarizado com wp_update_post

O processo geral pelo qual você pode atualizar cada evento para refletir o número adequado de anos em seu post_content será algo assim:

  1. usando o primeiro evento da série, encontre todas as postagens subsequentes,
  2. localize o número no post_content e incremente-o em um,
  3. atualize a postagem.

Bem direto, certo? Aqui está como fazê-lo.

1 Encontre eventos subsequentes

Para atualizar eventos subsequentes, é importante ter o ID do evento principal. Isso geralmente é fácil de obter se você já criou programaticamente o evento porque tribe_create_event retorna o ID da postagem.

Caso contrário, você pode fazer algo como encontrar uma postagem pelo título ou algo semelhante. E uma vez que você tenha esse post, você pode pegar seu ID.

Uma vez feito, escreva uma consulta rápida para recuperar todas as postagens com o ID da postagem inicial como pai :

<?php

private function find_all_events( $event_id) {

  global $wpdb;
  $events = $wpdb->get_results(
    $wpdb->prepare("
      SELECT ID, post_content
      FROM   $wpdb->posts
      WHERE  post_parent = '%d'
      AND    post_status = 'publish'
    ", $event_id),
    ARRAY_A
  );

  return $events;
}

Obviamente, prefiro colocar isso em sua função para poder chamá-lo em vários lugares em todo o aplicativo, depurá-lo conforme necessário e isolar sua responsabilidade.

Você pode querer retornar os resultados como uma coleção de objetos ou adicionar mais qualificadores à consulta para limitar o tipo de resultados que são retornados. Independentemente disso, a principal conclusão desse código é que você está pegando os IDs e post_content de todas as postagens subsequentes em uma série com base no ID do evento inicial.

2 Atualizar o conteúdo da postagem

Depois que os eventos forem retornados, um loop pode ser configurado para iterar por eles. Dependendo de como você define o loop, determinará como você configura um contador, mas uma das maneiras mais básicas de fazer isso é:

  1. defina um valor, começando em um, que você pode adicionar e incrementar durante cada iteração,
  2. adicione isso ao dígito encontrado no post.

Então, se você usar um  loop foreach, o código pode ser algo assim :

<?php

public function update_future_events( $event_id) {

  $events = $this->find_all_events( $event_id );

  $iteration = 1;
  foreach ($events as $event) {

    preg_match_all( '/(d+)/', $anniversary['post_content'], $matches );

    $original_year = $matches[0];
    $original_year = intval( $original_year[0] );
    $new_year      = ($original_year + $iteration );
    $iteration++;

    // See forth-coming gist.
  }
}

Isso será um pouco mais complicado se você tiver vários dígitos no corpo do seu post, mas isso é suficiente para dar a ideia de como trabalhar com pelo menos um (como no exemplo no topo do post).

3 Atualize a postagem

Finalmente, uma vez que o post_content foi atualizado, é uma questão de chamar uma API do WordPress para atualizar o conteúdo do post.

<?php

public function update_future_events( $event_id) {

  $events = $this->find_all_events( $event_id );

  $iteration = 1;
  foreach ($events as $event) {

    // See previous gist.

    $event['post_content'] = str_ireplace( $original_year, $new_year, $event['post_content'] );
    wp_update_post(array(
      'ID'           => $event['ID'],
      'post_content' => $event['post_content'],
    ));
  }
}

É claro que, conforme mencionado ao longo do post, seu código pode parecer diferente, os aspectos de desempenho disso podem ser diferentes ou exigir algumas outras considerações (que abordarei momentaneamente).

Mas, se nada mais, este é pelo menos um ponto de partida.

outras considerações

Pode haver momentos em que o conteúdo da postagem contém vários números, ou pode haver momentos em que pode haver milhares de eventos subsequentes. Em cada um desses casos, a abordagem acima pode não ser adequada.

Ou seja, você ainda pode seguir essas etapas, mas elas podem não ter o melhor desempenho conforme escrito. Nesse caso, pode ser necessário configurar um processo em lote para lidar com isso ou fazê-lo fora do horário comercial usando um cron job ou uma das várias outras maneiras de resolver o problema.

As abordagens acima mencionadas estão além do escopo deste post, mas a abordagem de três etapas permanece a mesma. É mais sobre dividir e conquistar para resolver o problema do que como isso é feito.

Fonte de gravação: tommcfarlin.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação