Como criar cache na api do Wordpress

Criar cache na api do wordpress é uma tarefa bem simples, primeiramente abriremos nosso arquivo functions.php e adicionaremos o seguinte código:

add_action(
    'rest_api_init',
    function () {
        register_rest_route(
            'api/v1',
            'posts-generic',
            array(
            'methods' => 'GET',
            'callback' => 'get_posts_generic',
            'permission_callback' => '__return_true',
            )
        );
    }
);

Essa função estará registrando uma rota na api do wordpress, na função register_rest_route o primeiro parâmetro é o namespace, o segundo é o endpoint e o terceiro é um array com as configurações da rota.

Nesse array, o primeiro é o método HTTP, no nosso caso do teste é GET, o segundo é a função que será chamada e o terceiro é uma função de permissão, que no nosso caso é __return_true que sempre retorna true.

agora vamos criar a função get_posts_generic que será responsável por retornar os posts.

function get_posts_generic() {
  $transient_key = 'posts_generic_v1';

  $cached_posts = get_transient($transient_key);

  if($cached_posts) {
      return $cached_posts;
  } else {
      $posts = get_posts();
      set_transient($transient_key, $posts, 60 * 60);
      return $posts;
  }
}

Aqui estamos criando uma chave para o cache na variável, e verificando se existe algum cache com essa chave,se existir retornamos o cache, se não existir, pegamos os posts e salvamos o cache com a função set_transient.

Caso existe uma paginação, é necessário adicionar o número da página na key, podendo ser feito dessa maneira:

$transient_key = 'posts_generic_v1_page_' . $_GET['page'];

O que ele faz por baixo dos "panos", é criar essa chave na tabela wp_options com um prazo de validade, após esse prazo passar ele pega de novo as informações.

Essa maneira agiliza esse endpoint evitando toda vez bater em nossa aplicação e banco dados.

Espero que esse artigo tenha te ajudado! Se tiver alguma dúvida pode falar comigo nas minhas redes sociais.

Até a próxima!