Como posso adicionar uma página PHP ao WordPress?

263

Eu quero criar uma página personalizada para o meu blog WordPress que executará meu código PHP nele, permanecendo parte do CSS / tema / design geral do site.

O código PHP fará uso de APIs de terceiros (então eu preciso incluir outros arquivos PHP).

Como eu faço isso?

NB: Não tenho uma necessidade específica de interagir com a API do WordPress. Além de incluir outras bibliotecas PHP, não preciso ter outras dependências no código PHP que quero incluir em uma página do WordPress. Portanto, obviamente, qualquer solução que não exija o aprendizado da API do WordPress seria a melhor.

Rutherford
fonte
você pode usar esses plugins: wordpress.org/extend/plugins/exec-php ou wordpress.org/extend/plugins/php-code-widget Espero que ajude!
Michaël

Respostas:

400

Você não precisa interagir com a API ou usar um plug-in.

Primeiro, duplique post.phpou page.phpna pasta do tema (em /wp-content/themes/themename/).

Renomeie o novo arquivo como templatename.php(onde nome do modelo é como você deseja chamar seu novo modelo). Para adicionar seu novo modelo à lista de modelos disponíveis, digite o seguinte na parte superior do novo arquivo:

<?php
/*
Template Name: Name of Template
*/
?>

Você pode modificar este arquivo (usando PHP) para incluir outros arquivos ou o que você precisar.

Em seguida, crie uma nova página no seu blog WordPress e, na tela de edição da página, você verá um menu suspenso Modelo no widget Atributos à direita. Selecione seu novo modelo e publique a página.

Sua nova página usará o código PHP definido em templatename.php

Fonte: Criando modelos de página personalizados para uso global

Adam Hopkinson
fonte
20
A opção de modelo não estava disponível até eu criar o arquivo com o comentário. Em seguida, a opção do modelo apareceu. Bom - eu ia usar códigos de acesso, mas isso é bem mais fácil.
Dave Hilditch
1
Existe alguma desvantagem em usar um plugin para publicar php?
Suhail Gupta
1
Uma página é uma página, quando o navegador visualiza uma solicitação http - então sim.
Adam Hopkinson
3
@DamianGreen a questão não pede uma forma totalmente automatizada, e em shows de fato uma preferência para evitar o WP API
Adam Hopkinson
4
Esta resposta parece errada porque não está reutilizando os elementos do tema existentes, mas copiando-os (parágrafo 2). Se o tema for fornecido por terceiros, ele poderá receber atualizações de temas que não serão transmitidas em cascata para um modelo personalizado. Além disso, ele adiciona complexidade à alteração da aparência do seu site. A alteração do tema requer uma reconstrução da página personalizada. Um plugin não seria melhor por esses dois motivos? Da maneira como li a pergunta, o OP deseja adicionar funcionalidade adicional, e não elementos adicionais do tema "uso de APIs de terceiros"
Philip Couling 05/12/18
29

Se você deseja criar seu próprio arquivo .php e interagir com o WordPress sem 404 cabeçalhos e manter sua estrutura atual de link permanente, não há necessidade de um arquivo de modelo para essa página.

Eu descobri que essa abordagem funciona melhor no seu arquivo .php:

<?php
    require_once(dirname(__FILE__) . '/wp-config.php');
    $wp->init();
    $wp->parse_request();
    $wp->query_posts();
    $wp->register_globals();
    $wp->send_headers();

    // Your WordPress functions here...
    echo site_url();
?>

Depois, você pode simplesmente executar quaisquer funções do WordPress após isso. Além disso, isso pressupõe que seu arquivo .php esteja dentro da raiz do seu site WordPress, onde wp-config.phpestá localizado.

Esta, para mim, é uma descoberta inestimável, já que eu estava usando require_once(dirname(__FILE__) . '/wp-blog-header.php');por mais tempo, pois o WordPress até diz que essa é a abordagem que você deve usar para integrar as funções do WordPress, exceto que causa 404 cabeçalhos, o que é estranho que eles gostariam você usar essa abordagem. Integrando o WordPress ao seu site

Eu sei que muitas pessoas responderam a essa pergunta, e ela já tem uma resposta aceita, mas aqui está uma boa abordagem para um arquivo .php na raiz do seu site WordPress (ou tecnicamente em qualquer lugar que você quiser no seu site), no qual você pode navegar e carregar sem 404 cabeçalhos!


Atualização: existe uma maneira de usar wp-blog-header.phpsem 404 cabeçalhos, mas isso requer que você os adicione manualmente. Algo assim funcionará na raiz da sua instalação do WordPress:

<?php
    require_once(dirname(__FILE__) . '/wp-blog-header.php');
    header("HTTP/1.1 200 OK");
    header("Status: 200 All rosy");

    // Your WordPress functions here...
    echo site_url();
?>

Apenas para atualizar todos vocês sobre isso, é necessário um pouco menos de código para essa abordagem, mas cabe a você escolher qual deles usar.

Solomon Closson
fonte
1
No entanto, ocorrem 404 cabeçalhos, e mesmo o arquivo multisite do Wordpress wp-activate.phpprecisa desativar o cabeçalho 404, configurando $wp_query->is_404 = falseao ativar novos multisites usando require( dirname( __FILE__ ) . '/wp-blog-header.php' );na parte superior desta página.
Solomon Closson
2
Eu não entendo como você não pode recriar o problema. É muito simples de recriar. Basta instalar o Wordpress, depois criar um arquivo .php, usar a wp-blog-header.phpabordagem definida em codex.wordpress.org/Integrating_WordPress_with_Your_Website do que ver o cabeçalho 404 nas ferramentas do inspetor de navegador.
Solomon Closson
1
Aqui está uma página que documentos este problema também, no caso de você perdeu durante a sua intensa pesquisa sobre este problema: cooltrainer.org/...
Solomon Closson
1
O problema do cabeçalho é um problema que ocorre nas versões mais recentes do WordPress, exatamente o que sugeri no meu comentário inicial. Cuidado ao usar palavras como 'nunca falha'. :)
DrewT
1
Essa é uma abordagem muito imprópria para um problema. Ao seguir esse caminho, você está criando uma solução que funcionará apenas enquanto o WP não alterar sua autoinicialização. Você deve aproveitar os ganchos disponíveis para realizar (facilmente) o que isso está tentando fazer.
Lawrence Johnson
13

Se você é como eu, às vezes deseja fazer referência a funções do WordPress em uma página que não existe no CMS. Dessa forma, ele permanece específico do back-end e não pode ser excluído acidentalmente pelo cliente.

Isso é realmente simples de fazer, incluindo o wp-blog-header.phparquivo usando um PHP require().

Aqui está um exemplo que usa uma string de consulta para gerar dados do Facebook Open Graph (OG) para qualquer postagem.

Tomemos o exemplo de um link como http://example.com/yourfilename.php?1onde 1está o ID de uma postagem para a qual queremos gerar dados OG:

Agora, cujo conteúdo yourfilename.php, para nossa conveniência, está localizado no diretório raiz do WordPress:

<?php
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    $uri = $_SERVER['REQUEST_URI'];
    $pieces = explode("?", $uri);
    $post_id = intval( $pieces[1] );

    // og:title
    $title = get_the_title($post_id);

    // og:description
    $post = get_post($post_id);
    $descr = $post->post_excerpt;

    // og:image
    $img_data_array = get_attached_media('image', $post_id);
    $img_src = null;
    $img_count = 0;

    foreach ( $img_data_array as $img_data ) {
        if ( $img_count > 0 ) {
            break;
        } else {
            ++$img_count;
            $img_src = $img_data->guid;
        }
    } // end og:image

?>
<!DOCTYPE HTML>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=yes" />
<meta property="og:title" content="<?php echo $title; ?>" />
<meta property="og:description" content="<?php echo $descr; ?>" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo site_url().'/your_redirect_path'.$post_id; ?>" />
<meta property="og:image" content="<?php echo $img_src; ?>" />
<meta property="og:site_name" content="Your Title" />
</html>

Aí está: modelos de compartilhamento gerados para qualquer publicação usando a imagem, o trecho e o título reais da publicação!

Poderíamos ter criado um modelo especial e editado a estrutura do permalink para fazer isso, mas como é necessário apenas para uma página e porque não queremos que o cliente a exclua do CMS, essa parece ser a opção mais limpa.


EDIT 2017: observe que essa abordagem agora está obsoleta

Para instalações do WordPress a partir de 2016 ou superior, consulte Como posso adicionar uma página PHP ao WordPress? para incluir parâmetros extras antes de enviar os dados da página para o navegador.

DrewT
fonte
9

Criar a página do modelo é a resposta correta. Para isso, basta adicioná-lo à página criada dentro da pasta do tema:

<?php
    /*
    Template Name: mytemplate
    */
?>

Para executar esse código, você precisa selecionar "mytemplate" como modelo da página no back-end.

Consulte este link para obter os detalhes corretos https://developer.wordpress.org/themes/template-files-section/page-template-files/ .

Peter Mortensen
fonte
5

Qualquer resposta não cobre se você precisa adicionar uma página PHP fora do Tema WordPress. Este é o caminho.

Você precisa incluir o wp-load.php.

<?php require_once('wp-load.php'); ?>

Em seguida, você pode usar qualquer função do WordPress nessa página.

Eu sou a pessoa mais estúpida
fonte
Essa ideia foi muito útil para mim. No entanto, confira este post sobre o uso require_once('wp-load.php');correto
optimiertes
1

Crie uma página chamada my-page.php e salve-a no diretório de temas. Agora, edite esse arquivo php e escreva a seguinte linha no topo da página

<?php /* Template Name: My Page */ ?>

Escreva seu código PHP na linha de definição de página personalizada, você pode chamar seu outro modelo WP, funções dentro deste arquivo.

Comece como <?php require_once("header.php");?>OU

de qualquer maneira que você esteja integrando seu cabeçalho e rodapé para manter o layout consistente.

Como esta é uma página minha, você precisa criar uma página no painel de administração do WordPress. Vá para Admin => Páginas => Adicionar novo

Adicione um título de página, dependendo de como você codificou a página personalizada, você também pode adicionar o corpo da página (descrição). Você pode pular completamente a descrição se ela estiver escrita na página php personalizada.

No lado direito, selecione Modelo. Escolha Minha página personalizada no menu suspenso. Estás pronto! Vá para a lesma (permalink) criada por [wordpress] [1] e veja a página.

Ashish Thakor
fonte
1

A melhor maneira de adicionar páginas PHP em WordPress para Page Templatena child-themepasta.

Como criar Page Templateno WordPress.

Crie um arquivo nomeado template-custom.phpe coloque-o /wp-content/theme/my-theme/.

<?php
 /*
 * Template Name: Custom Template
 * Custom template used for custom php code display
 * @package   Portafolio WordPress Theme
 * @author    Gufran Hasan
 * @copyright Copyright templatecustom.com
 * @link      http://www.templatecustom.com
 */
?>
<?php get_header(); ?>
<?php
  //write code here

 ?>

<?php get_footer(); ?>

Para mais detalhes

Gufran Hasan
fonte
1

Você vai querer dar uma olhada na API de plug-ins do WordPress.

Isso explica como "conectar" e "filtrar" as diferentes partes da mecânica do WordPress, para que você possa executar o código PHP personalizado praticamente em qualquer lugar a qualquer momento. Essa criação de código de conexão, filtragem e código personalizado pode ocorrer no seu arquivo functions.php em qualquer um dos seus temas. Feliz codificação :)

hsatterwhite
fonte
Eu realmente não quero interagir com a própria API do Wordpress - meu código PHP é completamente independente de quaisquer desvantagens do WP. Mas eu preciso fazer referência a arquivos php externos. Você tem certeza de que a API é o que preciso aprender neste caso?
Rutherford
Tudo depende do que você está tentando fazer. O uso da API pode ajudar em alguns casos e outros não serem essenciais. Tudo depende do que você está tentando alcançar. Você pode seguir a sugestão de @ adam e usar modelos de página ou manter todo o seu código personalizado em uma cesta e depois conectar / filtrar em diferentes partes do WordPress. Eu diria tudo e tudo, escolha o que funciona melhor e com o que você se sente confortável. Todas as três respostas alcançarão o que você deseja, de uma forma ou de outra.
Hsatterwhite 11/05
1

Se você não quiser lidar com a API do WordPress, a resposta de Adam é realmente a melhor.

Se você estava disposto a lidar com a API, sugeriria que se ligasse ao gancho "redirecionamento de modelo", o que permitiria apontar uma URL ou página específica para um arquivo PHP arbitrário enquanto ainda tivesse acesso ao WordPress.

Stephen R
fonte
1

A resposta amplamente aceita por Adam Hopkinson não é um método totalmente automatizado de criar uma página! Requer que o usuário crie manualmente uma página no back-end do WordPress (no painel wp-admin). O problema é que um bom plugin deve ter uma configuração totalmente automatizada. Não deve exigir que os clientes criem páginas manualmente.

Além disso, algumas das outras respostas amplamente aceitas aqui envolvem a criação de uma página estática fora do WordPress, que inclui apenas algumas das funcionalidades do WordPress para atingir o cabeçalho e rodapé com temas. Embora esse método possa funcionar em alguns casos, isso pode dificultar muito a integração dessas páginas com o WordPress sem incluir toda a sua funcionalidade.

Eu acho que a melhor abordagem, totalmente automatizada, seria criar uma página usando wp_insert_poste residindo no banco de dados. Um exemplo e uma ótima discussão sobre isso, e como evitar a exclusão acidental da página por um usuário, podem ser encontrados aqui: wordpress-automaticamente-Creating-page

Sinceramente, estou surpreso que essa abordagem ainda não tenha sido mencionada como resposta a essa pergunta popular (ela foi publicada por 7 anos).

Damian Green
fonte
1
Imediatamente depois que escrevi a resposta acima, percebi que a intenção do usuário era poder incluir PHP no conteúdo da página; essa abordagem obviamente não permite isso; O PHP pode ser usado apenas para gerar o conteúdo, não ser incluído no conteúdo, portanto, a página seria salva estaticamente e não dinamicamente. No entanto, você pode dar à página uma aparência dinâmica recriando a página e seu conteúdo (fornecendo o ID da página) sempre que for chamado. Seu plugin iria lidar com quando e como isso ocorre, talvez, monitorando $ _SERVER [ "REQUEST_URI"]
Damian Green
2
Na sua resposta, você fala sobre a prevenção de exclusão acidental pelo usuário. Como você faz isso?
GJ
0

Tente o seguinte:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
Heena Patel
fonte
0

Além de criar um arquivo de modelo personalizado e atribuir esse modelo a uma página (como no exemplo da resposta aceita), também existe uma maneira com a convenção de nomenclatura de modelos que o WordPress usa para carregar modelos (hierarquia de modelos).

Crie uma nova página e use o slug dessa página para o nome do arquivo do modelo (crie um arquivo de modelo chamado page- {slug} .php ). O WordPress carregará automaticamente o modelo que se encaixa nessa regra.

Danijel
fonte
0

Basta criar um page-mytitle.phparquivo para a pasta do tema atual e, no painel, uma página "mytitle" .

Então, quando você invocar a página pelo URL, verá o page-mytitle.php. Você deve adicionar HTML, CSS, JavaScript, wp-loop, etc. a este arquivo PHP ( page-mytitle.php).

Elias Katsaniotis
fonte
0

Você pode adicionar qualquer arquivo php na pasta de temas ativos, como (/ wp-content / themes / your_active_theme /) e adicionar uma nova página do wp-admin e selecionar esse modelo de página nas opções de modelo de página.

<?php
/*
 Template Name: Your Template Name
 */
?>

E há uma outra maneira, como você pode incluir seu arquivo em functions.php e criar shortcode a partir disso e, em seguida, colocar esse shortcode em sua página dessa maneira.

// CODE in functions.php 

function abc(){
 include_once('your_file_name.php');
}
add_shortcode('abc' , 'abc');

E então você pode usar esse código de acesso na página lateral do wp-admin como esta [abc] .

Ajay Katariya
fonte
-2
<?php /* Template Name: CustomPageT1 */ ?>

<?php get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
        <?php
        // Start the loop.
        while ( have_posts() ) : the_post();

            // Include the page content template.
            get_template_part( 'template-parts/content', 'page' );

            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) {
                comments_template();
            }

            // End of the loop.
        endwhile;
        ?>

    </main><!-- .site-main -->

    <?php get_sidebar( 'content-bottom' ); ?>

</div><!-- .content-area -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
Ahmed Elcheikh
fonte
-2

Você pode nomear seu arquivo "newpage.php" - coloque-o no diretório de temas em wp-content. Você pode torná-lo um modelo de página (consulte http://codex.wordpress.org/Pages ... ) Ou pode incluí-lo em um dos arquivos PHP em seu tema, como header.php ou single.php.

Melhor ainda, crie um tema filho e coloque-o lá, para que você deixe o código do tema em paz e seja mais fácil atualizar.

http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates

Chandra Kumar
fonte
O link está meio quebrado: ele redireciona duas vezes e não há nenhuma subseção chamada "Criando seus próprios modelos de página" . A mais próxima pode ou não ser a subseção " Modelos de página ". Há também a página separada (mesmo nome). Page Templates
Peter Mortensen
-5

Você também pode usar diretamente a página PHP, como criar a página PHP e executar com o caminho completo.

Como, http: //localhost/path/filename.php

nim
fonte
Mas a função de tradução não funciona, portanto, por algum motivo, não será carregada.
ram4nd