Cómo agregar una página PHP a WordPress?


Quiero crear una página personalizada para mi blog de WordPress que ejecutará mi código PHP en él, sin dejar de ser una parte del CSS/tema/diseño general del sitio.

El código PHP hará uso de API de terceros (por lo que necesito incluir otros archivos PHP)

¿Cómo logro esto?

N.B. No tengo una necesidad específica de interactuar con la API de Wordpress-aparte de incluir ciertas otras libs PHP que necesito No tengo otras dependencias en el código PHP que quiero incluir en un WP pagina. Así que obviamente cualquier solución que no requiera aprender la API WP sería la mejor.

 213
Author: Volker E., 2010-05-11

16 answers

No es necesario interactuar con la API o utilizar un plugin.

Primero, duplica post.php o page.php en la carpeta del tema (en /wp-content/themes/themename/).

Cambie el nombre del nuevo archivo como templatename.php (donde templatename es lo que desea llamar a su nueva plantilla). Para agregar su nueva plantilla a la lista de plantillas disponibles, ingrese lo siguiente en la parte superior del nuevo archivo:

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

Puede modificar este archivo (usando PHP) para incluir otros archivos o lo que necesite.

A continuación, crear una nueva página en su Blog de WordPress, y en la pantalla de edición de página verás un desplegable Template en el widget Attributes a la derecha. Seleccione su nueva plantilla y publique la página.

Su nueva página utilizará el código PHP definido en templatename.php

Fuente: https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-custom-page-templates-for-global-use

 334
Author: Adam Hopkinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-24 21:49:00

Si quieres crear el tuyo propio .archivo php e interactuar con Wordpress sin Encabezados 404 y mantener su estructura de enlace permanente actual NO hay necesidad de un archivo de plantilla para esa página 1, encontré que este enfoque funciona mejor, en su .archivo 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();
?>

Entonces simplemente puede realizar cualquier función de wordpress después de esto. Además, esto supone que su .el archivo php se encuentra dentro de la raíz de su sitio de wordpress donde se encuentra su archivo wp-config.php.

Esto, para mí, no tiene PRECIO descubrimiento como yo estaba usando require_once(dirname(__FILE__) . '/wp-blog-header.php'); durante mucho tiempo como Wordpress incluso le dice que este es el enfoque que debe utilizar para integrar funciones de Wordpress, cept, causa 404 encabezados, lo cual es raro que querrían que utilice este enfoque. https://codex.wordpress.org/Integrating_WordPress_with_Your_Website

Sé que muchas personas han respondido a esta pregunta y ya tiene una respuesta aceptada, pero aquí hay un buen enfoque para a .archivo php dentro de la raíz de su sitio de wordpress (o técnicamente en cualquier lugar que desee en su sitio), que se puede navegar y cargar sin 404 Encabezados!

EDITAR

Solo una actualización rápida aquí. Hay una manera de usar wp-blog-header.php sin encabezados 404, pero esto requiere que agregue los encabezados manualmente, algo como esto funcionará en la raíz de su instalación de 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();
?>

Solo para actualizarlos a todos sobre esto, se necesita un poco menos de código para este enfoque, pero depende de usted en qué 1 se utiliza.

 16
Author: Solomon Closson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-09 04:25:02

Si eres como yo, a veces quieres poder hacer referencia a las funciones de WordPress en una página que no existe en el CMS. De esta manera, sigue siendo específico del backend y no puede ser eliminado accidentalmente por el cliente.

Esto es realmente simple de hacer simplemente incluyendo el archivo wp-blog-header.php usando un php require().

Aquí hay un ejemplo que usa una cadena de consulta para generar datos OG de Facebook para cualquier publicación.

Tomemos el ejemplo de un enlace como http://example.com/yourfilename.php?1 donde 1 es el ID de un post que desea generar datos OG para:

Ahora en el contenido de yourfilename.php que, para nuestra conveniencia, se encuentra en el directorio WP raíz:

<?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>

Ahí lo tienes: modelos de intercambio generados para cualquier publicación utilizando la imagen real de la publicación, extracto y título!

Podríamos haber creado una plantilla especial y editado la estructura de permalink para hacer esto, pero como solo se necesita para una página y porque no queremos que el cliente la elimine desde dentro del CMS, esto parecía ser el opción más limpia.


EDITAR 2017: Tenga en cuenta que este enfoque ahora está en desuso

Para las instalaciones de WP a partir de 2016+, consulte https://stackoverflow.com/a/39800534/1958998 para parámetros adicionales a incluir antes de enviar los datos de su página al navegador.

 13
Author: DrewT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 21:51:45

Crear la página de la plantilla es la respuesta correcta, para esto simplemente agregue esto a la página que creó dentro de la carpeta del tema

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

Para ejecutar este código, debe seleccionar mytemplate como plantilla de la página desde el back-end

Por favor, consulte este enlace para obtener los detalles correctoshttps://developer.wordpress.org/themes/template-files-section/page-template-files/page-templates/.

 7
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-09 13:59:00

Cualquier respuesta no cubría si necesita agregar una página PHP fuera del tema de WordPress. Este es el camino.

Necesitas incluir wp-load.php.

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

Entonces puedes usar cualquier función de WordPress en esa página.

 2
Author: I am the Most Stupid Person,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-30 11:11:10

Usted querrá echar un vistazo a WordPress' plugin API. Esto explica cómo " enganchar "y" filtrar " a diferentes partes de la mecánica de WordPress, para que pueda ejecutar código PHP personalizado prácticamente en cualquier lugar en cualquier momento dado. Este enganche, filtrado y creación de código personalizado pueden tener lugar en sus funciones.archivo php en cualquiera de sus temas. Feliz codificación :)

 1
Author: hsatterwhite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-11 12:03:47

La respuesta ampliamente aceptada por Adam Hopkinson no es un método totalmente automatizado de crear una página! requiere que un usuario cree manualmente una página en el back-end de WordPress (en el guión wp-admin). El problema con eso es que un buen plugin debe tener una configuración totalmente automatizada, no debe requerir que los clientes creen páginas manualmente.

También, algunas de las otras respuestas ampliamente aceptadas aquí implican la creación de una página estática fuera de WordPress, que luego incluyen solo algunos de los WordPress funcionalidad para lograr el encabezado y pie de página temáticos. Si bien ese método puede funcionar en algunos casos, esto puede hacer que la integración de estas páginas con WordPress sea muy difícil sin tener toda su funcionalidad incluida.

Creo que el mejor enfoque, totalmente automatizado, sería crear una página usando wp_insert_post y hacer que resida en la base de datos. Un ejemplo y una gran discusión sobre eso, y cómo evitar la eliminación accidental de la página por un usuario, se puede encontrar aquí: wordpress-automáticamente-creando-página

Francamente, me sorprende que este enfoque no haya sido mencionado como una respuesta a esta pregunta popular (se ha publicado durante 7 años).

 1
Author: Damian Green,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-05 17:41:05

Crea una página llámala mi página.php y guárdelo en su directorio de temas. Ahora, edite este archivo php y escriba la siguiente línea en la parte superior de la página

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

Escriba su código PHP bajo la línea de definición de página personalizada, puede llamar a su otra plantilla WP, funciones dentro de este archivo.

Empezar como <?php require_once("header.php");?> O

De cualquier manera que esté integrando su encabezado y pie de página para mantener el diseño consistente.

Dado que esta es mi página, NECESITA CREAR UNA PÁGINA desde Panel de administración de WordPress. Ir a Admin = > Pages = > Add New

Agregue un título de página, dependiendo de cómo haya codificado la página personalizada, también puede agregar el cuerpo de la página (descripción). Puede omitir completamente la descripción si está escrita en la página php personalizada.

En el lado derecho, seleccione Plantilla. Elige Mi página personalizada en el menú desplegable. ¡Todo listo! Ir a la slug (enlace permanente) creado por[wordpress] [1] y ver la página.

 1
Author: ashish thakor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-26 06:23:01

Si no quieres lidiar con WP API, entonces la respuesta de Adam es realmente la mejor.

Si estuviera dispuesto a tratar con la API, le sugeriría conectarse al gancho "template-redirect", que le permitiría apuntar una URL o página en particular a un archivo PHP arbitrario mientras todavía tiene acceso al WP.

 0
Author: Stephen R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-12 15:24:15

Aparte de crear un archivo de plantilla personalizado y asignar esa plantilla a una página ( como en el ejemplo en respuesta aceptada ), también hay una forma con la convención de nomenclatura de plantillas que Wordpress utiliza para cargar plantillas ( jerarquía de plantillas ). Cree una nueva página y use el slug de esa página para el nombre del archivo de plantilla (crear archivo de plantilla llamado page-{slug}.php ). WordPress cargará automáticamente la plantilla que se ajuste a esta regla.

 0
Author: Danijel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-14 16:22:57

Prueba esto:

/**
 * The template for displaying demo page
 *
 * template name: demo template
 *
 */
 0
Author: Heena Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-11 10:54:13

Cambie el nombre del nuevo archivo como templatename.php (donde templatename es lo que quieres llamar tu nueva plantilla). Para agregar su nueva plantilla a la lista de plantillas disponibles, ingrese lo siguiente en la parte superior del nuevo archivo:

Puede modificar este archivo (usando PHP) para incluir otros archivos o lo que necesite.

Luego crea una nueva página en tu blog de WordPress, y en la pantalla de edición de página verás un menú desplegable de Plantilla en el widget de atributos a la derecha. Seleccione su nueva plantilla y publicar la página.

 0
Author: Nirav Webbleu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-20 09:05:34

Simplemente crea un page-mytitle.php a la carpeta del tema actual, y desde el Panel de control una página mytitle. Luego, cuando invoque la página por la url, verá la página-mytitle.php. Debe agregar htmp, css, js wp-loop e.t.c a este archivo php (page-mytitle.php)

 0
Author: Elias Katsaniotis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-28 09:51:04

Puede nombrar su archivo newpage.php-ponlo en tu directorio de temas en wp-content. Puedes convertirla en una plantilla de página (ver http://codex.wordpress.org/Pages {.) o puede incluirlo en uno de los archivos php de su tema, como header.php o single.php. Aún mejor, crea un tema hijo y ponlo ahí, para que dejes el código del tema solo y sea más fácil de actualizar.

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

 -1
Author: Chandra Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-02 10:12:54
<?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(); ?>
 -1
Author: Ahmed Elcheikh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 08:45:50

También puede usar directamente la página php, como para crear la página php y ejecutarla con la ruta completa. como, http://localhost/path/filename.php

 -3
Author: nim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-17 07:50:38