Usando funções do WordPress fora dos arquivos dele

Conhece a Digital Ocean? Tenha VPS em cloud pagando a partir de US$ 5 por mês! Cadastre-se pelo meu link de afiliado aqui e ganhe US$ 10! Dá para testar o plano mais básico por 2 meses, ou o segundo por um... Existem várias distros Linux pré-configuradas, muitos tutoriais de instalação dos serviços web e um excelente suporte. O serviço é rápido e estável, tenho gostado muito! Vale a pena conferir e resgatar os seus 10 dólares de crédito ao ativar sua conta. Eles aceitam PayPal ;)

por Marcos Elias

Com WordPress dá para fazer muita coisa. E não é necessário ficar preso aos arquivos dele: por trás dos panos ele oferece um excelente gerenciamento de conteúdo, você pode acessar as funções dele de várias formas, tanto em arquivos próprios dele, plugins, arquivos do tema ou… em arquivos externos!!!

O WordPress 3.0 trouxe os tipos de posts personalizados, junto com os campos personalizados já disponíveis em versões antigas faz do WP um dos sistemas mais versáteis. Não sou muito fã de sistemas que usam mysql para servir conteúdo, mas usando alguns sistemas de cache dá para levar melhor.

Estou usando isso em alguns projetos, em breve trarei mais dicas conforme eu for vendo na prática algumas coisas.

E como usar as funções do WordPress em arquivos externos?

Considerando o mesmo servidor, crie um arquivo PHP (de preferência na raiz do blog) com esse conteúdo:

<?php
define('WP_USE_THEMES', false);
include("wp-blog-header.php");
?>

Pronto! Esse wp-blog-header é “mágico”, ele carrega a instância do WordPress da pasta em que estiver e fornece toda a funcionalidade que você pode usar nos temas. Dá para listar posts e até mesmo criar novos posts usando a função wp_insert_post!

Por exemplo, para listar os últimos 15 artigos de um blog:

<?php
define('WP_USE_THEMES', false);
include("wp-blog-header.php");
query_posts('offset=0&posts_per_page=15');
?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; else: ?>
<li>Sem itens</li>
<?php endif; ?>

Veja que o loop “while…” é bastante similar ao loop usado nos temas, você pode usar as mesmas variáveis e funções dos temas!!!

Se quisesse listar só os posts de determinada tag:

query_posts('tag=futebol&offset=0&posts_per_page=15');

Veja as possibilidades da query_posts no Codex do WordPress.

Outro exemplo, a inserção de um post. O trecho a seguir foi extraído de um dos meus sites, onde os visitantes podem enviar conteúdo e eles vão para o WP sem precisar passar pelo wp-admin. Se você conhece PHP poderá lê-lo e identificar facilmente as variáveis que não estão definidas nele (afinal é para você ver e adaptar, não copiar e colar como está).

$new_post = array(
    'post_title' => 'Olá mundo!',
    'post_content' => 'Bla bla bla... Pode ser o conteúdo pego de um form com $_POST["blablabla"]',
 //   'post_date' => date('Y-m-d H:i:s'),
    'post_author' => 2,
    'post_type' => 'post',
    'post_category' => array(0),
    'tags_input' => 'wordpress, exemplo, php, explorando'
);

if (is_user_logged_in()) {
 $new_post['post_status'] = 'publish';
} else {
 $new_post['post_status'] = 'pending';
}

//categoria
//1 = Videos, 4 = English, 5 = Portuguese
if ($mep_language == "en") {
$new_post['post_category'] = array(1, 4);
} else {
$new_post['post_category'] = array(1, 5);
}

$post_id = wp_insert_post($new_post);

if (isset($post_id)) {

// se deu certo e o post existe...

if (is_user_logged_in()) {
$enderecopublico = "http://seusite/?p=" . $post_id;
} else {
$enderecopublico = "http://seusite/paginaqueavisaquefoienviadopramoderacao";

A função wp_insert_post($new_post) retorna um número se der certo, a ID do novo post (que foi armazenada em $post_id). $new_post é um array.

Em ‘post_date’ => date(‘Y-m-d H:i:s’) deixei comentado para que ele poste imediatamente. O item post_status pode ser ‘post’ ou ‘pending’, para deixar o post pendente para aprovação. No exemplo acima deixei pendente para visitantes não logados (assim o post vai para moderação), mas caso alguém esteja logado ele vai ao ar direto.

post_author define o autor, você pode usar 1 para o “admin” (ou o primeiro autor criado na instalação), no caso acima usei 2 para que os posts fossem atribuídos ao meu usuário de ID 2. Para ver o número do autor geralmente você pode ir na edição de usuários, clicar para editar algum e observar a ID na barra de endereços.

As categorias complicam um pouco porque devem ser fornecidas na forma de um array (com as IDs numéricas das categorias, separadas por vírgulas). As tags são mais simples, separando-as por vírgula como texto mesmo, sem se preocupar com as IDs (exemplo: dance, techno, house, sets).

No final ainda verifico se o usuário está logado ou não. Se estiver, já envia para o endereço da nova página postada. Independente da estrutura dos links permanentes (permalinks) você pode linkar para um post usando /?p=ID, onde ID é a ID numérica dele. Nas versões recentes (nem precisa ser a 3.0) o WordPress redireciona automaticamente para a url com o permalink correto (o que estiver definido nas opções).

Explore o WordPress e as funções possíveis no Codex. Você pode ter um site usando WordPress sem ter a “cara” de WordPress. Se seus usuários acham o painel do WP complicado, você pode criar uma interface simples para ele. Pode criar seções independentes, indo muito além da limitação de codificar nos temas. O trabalho do pessoal do WP é d+, apenas incluindo o wp-blog-header.php pode-se ter acesso a todos os recursos!

Veja mais no Codex (em inglês; se não souber, aprenda!):
http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

publicidade
comments powered by Disqus

Comentários arquivados

  1. Cara, meus parabéns pelo seu artigo!

    Procurei a net inteira e não conseguí encontar em nenhum lugar como eu faço para utiliza as funções do wordpress “fora dele”. Por exemplo, exibir meus últimos posts em uma página qualuqer do meu site (fora do theme do blog).

    Você com esse post esclareceu muito bem. Apesar deser bem simples, basta incluir o mágico “wp-blog-header.php”, eu não achava em lugar algum explciação de como fazer essas coisas. Parabenizo você pela iniciativa de ter estudado, aprendido e compartilhado.

    Muito obrigado!

  2. escreveu

    Po, valeu pelos elogios Daniel, agradeço o comentário! :D

    Eu me matei pra achar isso também, rsrs… Consegui achar em inglês, onde a documentação é bem maior. E como de costume optei por compartilhar, sempre em busca de “utilidade pública” :)

    Abraços

  3. escreveu

    Cara, esse post realmente é animal.

    No entanto, continuo com uma dúvida. Você sabe como posso mostrar no footer de um WordPress os últimos posts de um outro WordPress??

    O que observei testando seu tutorial é que ele funciona bem em qualquer arquivo .PHP fora de uma instalação WordPress.

    Desde já, obrigado pela atenção.

  4. escreveu

    Eu não testei, mas imagino que funcione se você usar um arquivo externo e depois usar o include para embutir ele. Vale testar também com o caminho completo, por exemplo:

    include(“/var/www/html/blog1/wp-blog-header.php”);

    (precisaria pegar o caminho completo do arquivo no servidor, não a URL dele)

    Talvez funcione, mas pode ser que dê alguma coisa inesperada.

  5. Daniel Dauber escreveu

    mandou bem no artigo. utilizei wp-blog-header fora da raiz do wp:

    have_posts() ) : $the_query->the_post(); ?>

    <a href="” rel=”bookmark”>

    <a href="”>

    <?php the_excerpt('Leia Mais’); ?>
    Páginas: ‘, ‘after’ => ”, ‘next_or_number’ => ‘number’)); ?>

  6. Tiago escreveu

    Velho, eu também procurei na internet inteira e só aqui achei a solução dos meus problemas!

    Meus parabéns!

  7. Tiago escreveu

    E se eu quiser apenas chamar o último post, ele com o conteúdo e tudo, e não apenas o link dele?

  8. Alexandre Zanette escreveu

    Meu velho!!!! Tu é o CARA!
    Muito obrigado pelo compartilhamento…
    Meus PARABÉNS pelo estudo e aprendizado!

  9. Olá Marcos, muito bom o seu artigo era justamente o que eu estava procurando para carregar o header o meu blog em um arquivo externo. obrigado por compartilhar conosco. Seu post já tem 5 anos mas ainda é muito útil

  10. escreveu

    Boa Noite, amigo eu tou tentando fazer isso no meu site puxar um conteúdo pelo do blog wordpress include(“blog/banner.php”); pra home do meu site que que utiliza outra mysqli_connect e acho que o problema ta sendo isso que ta dando problema com a outra conexão.

    Você sabe me dizer como resolver isso ?

    Obrigado Daniel