Skip to content

Instantly share code, notes, and snippets.

@fabriziofeitosa
Last active September 9, 2020 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fabriziofeitosa/32ecb87d02f3d0af165e7ff48578c87b to your computer and use it in GitHub Desktop.
Save fabriziofeitosa/32ecb87d02f3d0af165e7ff48578c87b to your computer and use it in GitHub Desktop.
(WP) Acesso API WP e paginação através de um campo de busca (WordPress Page)
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono&display=swap" rel="stylesheet">
<style>
ul.listagem {
font-family: 'Roboto Mono', monospace;
}
</style>
<?php wp_head(); ?>
</head>
<body class="d-flex align-items-stretch">
<div class="container-fluid">
<div class="row">
<div class="col-12 col-md-8 espaco-esquerdo"></div>
<div class="col-12 col-md-4 area-conteudo">
<div class="logo">
<img src="<?= plugin_dir_url( __FILE__ ) ?>/assets/img/logo.png" alt="Logotipo HMSVP" class="logotipo img-fluid">
</div>
<hr>
<div class="alert alert-success text-center" role="alert">Doação realizada com sucesso!</div>
<section>
<h1>Muito obrigado! A sua doação irá ajudar muitas crianças.</h1>
<?php
$site = "https://spacemoney.com.br";
$termo = isset($_GET['busca']) ? $_GET['busca'] : '';
$pag = isset($_GET['pag']) ? $_GET['pag'] : 1;
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
?>
<form id="searchform" method="get" action="">
<input type="text" class="search-field" name="busca" placeholder="Procurar" value="<?= $termo; ?>">
<input type="submit" value="Procurar">
</form>
<?php
// Faz a solicitação GET para o endereço.
$request = wp_remote_get( $site . "/wp-json/wp/v2/posts?search=" . $termo . "&page=" . $pag );
// Se não houve erro...
if ( ! is_wp_error( $request ) ) {
// Get Headers
$headers = wp_remote_retrieve_headers( $request );
// Total de registros
$totalPosts = $headers['X-WP-Total'];
// Total de pag
$totalPag = $headers['x-wp-totalpages'];
// pegamos o "corpo" da resposta recebida...
$body = wp_remote_retrieve_body( $request );
// e transformamos de JSON em um array PHP normal.
$data = json_decode( $body );
console_log( $data );
// Se não houve erro nesta etapa, iteramos pelo array
// e montamos uma lista com título e link.
if ( ! is_wp_error( $data ) ) {
echo '<ul class="listagem">';
foreach( $data as $rest_post ) {
echo '<li>';
echo '<a href="' . esc_url( $rest_post->link ) . '"><h3>' . $rest_post->title->rendered . '</h3></a>';
$resumo = substr($rest_post->content->rendered, 0, 400).'…';
echo "<p class='text-justify'>" . wp_strip_all_tags($resumo) . "</p>";
echo "<hr>";
echo '</li>';
}
echo '</ul>';
// Pagination
if( $pag > 1 ) echo "<a href='" . montURL($url) . "' class='btn btn-primary'>Anteriores</a>";
console_log( $pag . '/' . $totalPag );
if( $pag < $totalPag )echo "<a href='" . montURL($url, 'next') . "' class='btn btn-primary'>Próximos</a>";
}
}
?>
</section>
</div>
</div>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body>
</html>
<?php
function montURL( $url, $pag = '' ) {
$url_parts = parse_url($url);
// If URL doesn't have a query string.
if (isset($url_parts['query'])) { // Avoid 'Undefined index: query'
parse_str($url_parts['query'], $params);
} else {
$params = array();
}
$params['busca'] = isset($_GET['busca']) ? $_GET['busca'] : '';
if( $pag == 'next' ) {
$params['pag'] = isset($_GET['pag']) ? ($_GET['pag'] + 1) : 2;
} else {
$params['pag'] = isset($_GET['pag']) ? ($_GET['pag'] - 1) : 1;
}
// Note that this will url_encode all values
$url_parts['query'] = http_build_query($params);
// If you have pecl_http
// echo http_build_url($url_parts);
// If not
return $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'] . '?' . $url_parts['query'];
}
?>
@fabriziofeitosa
Copy link
Author

Em breve eu atualizo o código para ficar melhor (add possibilidade de até mais de um site), fiz da maneira mais rápida possível para atingir um objetivo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment