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

263

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

El código PHP hará uso de API de terceros (así que necesito incluir otros archivos PHP).

¿Cómo logro esto?

NB: no tengo una necesidad específica de interactuar con la API de WordPress; además de incluir ciertas otras bibliotecas PHP, no necesito otras dependencias en el código PHP que quiero incluir en una página de WordPress. Entonces, obviamente, cualquier solución que no requiera aprender la API de WordPress sería la mejor.

rutherford
fuente
puede usar esos complementos: wordpress.org/extend/plugins/exec-php o wordpress.org/extend/plugins/php-code-widget ¡ Espero que ayude!
Michaël

Respuestas:

400

No necesita interactuar con la API o usar un complemento.

Primero, duplica post.phpo page.phpen la carpeta de tu tema (debajo /wp-content/themes/themename/).

Cambie el nombre del nuevo archivo como templatename.php(donde templatename es lo que desea llamar 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.

Luego cree una nueva página en su blog de WordPress, y en la pantalla de edición de página verá un menú desplegable de Plantilla en el widget Atributos a la derecha. Seleccione su nueva plantilla y publique la página.

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

Fuente: Creación de plantillas de página personalizadas para uso global

Adam Hopkinson
fuente
20
La opción de plantilla no estaba disponible hasta que creé el archivo con el comentario. Luego apareció la opción de plantilla. Agradable: iba a usar códigos cortos, pero esto es mucho más fácil.
Dave Hilditch
1
¿Hay alguna desventaja de usar un complemento para publicar php?
Suhail Gupta
1
Una página es una página, cuando el navegador la ve que es una solicitud http, entonces sí.
Adam Hopkinson
3
@DamianGreen la pregunta no pide una forma totalmente automatizada, y de hecho muestra una preferencia por evitar la API de WP
Adam Hopkinson
44
Esta respuesta se siente mal porque no está reutilizando los elementos del tema existentes, sino copiando y pegando (párrafo 2). Si el tema es proporcionado por un tercero, puede recibir actualizaciones del tema que no se convertirán en una plantilla personalizada. Además, agrega complejidad al cambio de la apariencia de su sitio, el cambio de tema requiere una reconstrucción de la página personalizada. ¿No sería mejor un complemento por estas dos razones? La forma en que leí la pregunta, el OP desea agregar funcionalidad adicional, no elementos de tema adicionales "uso de API de terceros"
Philip Couling
29

Si desea crear su propio archivo .php e interactuar con WordPress sin encabezados 404 y mantener su estructura de enlace permanente actual, no es necesario un archivo de plantilla para esa página.

Descubrí 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();
?>

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

Esto, para mí, es un descubrimiento invaluable ya que lo estaba usando require_once(dirname(__FILE__) . '/wp-blog-header.php');durante mucho tiempo, ya que WordPress incluso te dice que este es el enfoque que debes usar para integrar las funciones de WordPress, excepto que causa encabezados 404, lo cual es extraño que deseen que utilices este enfoque. Integrando WordPress con su sitio web

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


Actualización: hay una manera de usar wp-blog-header.phpsin 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 cuál use.

Solomon Closson
fuente
1
Sin embargo, se producen encabezados 404, e incluso el archivo multisitio de Wordpress wp-activate.phptiene que deshabilitar el encabezado 404 mediante la configuración $wp_query->is_404 = falseal activar nuevos sitios múltiples utilizando require( dirname( __FILE__ ) . '/wp-blog-header.php' );en la parte superior de esta página.
Solomon Closson
2
No entiendo cómo no puedes recrear el problema. Es muy sencillo recrearlo. Simplemente instale Wordpress, luego cree un archivo .php, use el wp-blog-header.phpenfoque como se define en codex.wordpress.org/Integrating_WordPress_with_Your_Website que ver el encabezado 404 en las herramientas del inspector de su navegador.
Solomon Closson
1
Aquí hay una página web que documenta este problema también, en caso de que se lo haya perdido durante su investigación intensiva sobre este problema: cooltrainer.org/…
Solomon Closson
1
El problema del encabezado es un problema que ocurre en las últimas versiones de WordPress, que es exactamente lo que sugerí en mi comentario inicial. Tenga cuidado al usar palabras como 'nunca falla'. :)
DrewT
1
Este es un enfoque muy inadecuado para un problema. Al seguir esta ruta, está creando una solución que solo funcionará mientras WP no cambie su arranque. Debería aprovechar los ganchos disponibles para lograr (fácilmente) lo que está tratando de hacer.
Lawrence Johnson el
14

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 el cliente no puede eliminarlo accidentalmente.

Esto es realmente simple de hacer simplemente al incluir el wp-blog-header.phparchivo usando un PHPrequire() .

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

Tome el ejemplo de un enlace como http://example.com/yourfilename.php?1donde 1está la ID de una publicación para la que queremos generar datos OG:

Ahora en el contenido de los yourfilename.phpcuales, para nuestra conveniencia, se encuentra en el directorio raíz de 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>

Ahí lo tienes: ¡modelos compartidos generados para cualquier publicación usando la imagen, extracto y título reales de la publicación!

Podríamos haber creado una plantilla especial y editar la estructura de enlaces permanentes para hacer esto, pero dado que solo es necesaria para una página y porque no queremos que el cliente la elimine desde el CMS, esta parecía la opción más limpia.


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

Para instalaciones de WordPress de 2016+, consulte ¿Cómo puedo agregar una página PHP a WordPress? para incluir parámetros adicionales antes de enviar los datos de su página al navegador.

DrewT
fuente
9

Crear la página de la plantilla es la respuesta correcta. Para esto, solo agregue esto a la página que creó dentro de la carpeta de temas:

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

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

Consulte este enlace para obtener los detalles correctos https://developer.wordpress.org/themes/template-files-section/page-template-files/ .

Peter Mortensen
fuente
5

Cualquier respuesta no cubrió si necesita agregar una página PHP fuera del tema de WordPress. Esta es la forma.

Debe incluir wp-load.php.

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

Luego puede usar cualquier función de WordPress en esa página.

Soy la persona mas estupida
fuente
Esta idea me fue muy útil. Sin embargorequire_once('wp-load.php');
mira
1

Cree una página, llámela my-page.php y guárdela 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 debajo de la línea de definición de página personalizada, puede llamar a su otra plantilla WP, funciones dentro de este archivo.

Comience 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.

Como esta es mi página, NECESITA CREAR UNA PÁGINA desde el panel de administración de WordPress. Vaya a Admin => Páginas => Agregar nuevo

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 por completo la descripción si está escrita en la página personalizada de php.

En el lado derecho, seleccione Plantilla. Elija Mi página personalizada en el menú desplegable. ¡Estas listo! Vaya a la babosa (enlace permanente) creada por [wordpress] [1] y vea la página.

ashish thakor
fuente
1

La mejor manera de agregar páginas PHP en WordPress a Page Templatela child-themecarpeta.

Cómo crear Page Templateen WordPress.

Cree un archivo con nombre template-custom.phpy póngalo /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 más detalles

Gufran Hasan
fuente
1

Querrás echar un vistazo a la API de complementos de WordPress.

Esto explica cómo "enganchar" y "filtrar" en 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. Esta creación de código de enganche, filtrado y personalizado puede tener lugar en su archivo functions.php en cualquiera de sus temas. Feliz codificación :)

hsatterwhite
fuente
Sin embargo, realmente no quiero interactuar con la API de Wordpress, ya que mi código PHP es completamente independiente de cualquier travesura de WP. Pero necesito hacer referencia a archivos php externos. ¿Estás seguro de que la API es lo que necesito aprender en este caso?
rutherford
Todo depende de lo que intentes hacer. El uso de la API puede ayudar en algunos casos y en otros no es esencial. Todo depende de lo que intentes lograr. Puede seguir la sugerencia de @ adam y usar plantillas de página o puede mantener todo su código personalizado en una cesta y luego conectar / filtrar a diferentes partes de WordPress. Yo diría todo, elige qué funciona mejor y con qué te sientes cómodo. Las tres respuestas lograrán lo que quieres de una forma u otra.
hsatterwhite
1

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

Si estuviera dispuesto a lidiar con la API, le sugiero que se conecte al enlace de "redirección de plantilla", lo que le permitiría apuntar una URL o página en particular a un archivo PHP arbitrario sin dejar de tener acceso a WordPress.

Stephen R
fuente
1

¡La respuesta ampliamente aceptada de Adam Hopkinson no es un método totalmente automatizado para crear una página! Requiere que un usuario cree manualmente una página en el back-end de WordPress (en el tablero wp-admin). El problema con eso es que un buen complemento debe tener una configuración totalmente automatizada. No debería requerir que los clientes creen páginas manualmente.

Además, algunas de las otras respuestas ampliamente aceptadas aquí implican crear una página estática fuera de WordPress, que luego incluye solo algunas de las funciones de WordPress para lograr el encabezado y el pie de página temáticos. Si bien ese método puede funcionar en algunos casos, esto puede dificultar la integración de estas páginas con WordPress sin tener todas sus funciones incluidas.

Creo que el mejor enfoque, totalmente automatizado, sería crear una página usando wp_insert_posty hacer que resida en la base de datos. Aquí puede encontrar un ejemplo y una gran discusión al respecto, y cómo evitar que un usuario elimine accidentalmente la página: wordpress-automatic-created-page

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

Damian Green
fuente
1
Inmediatamente después de escribir la respuesta anterior, me di cuenta de que la intención del usuario era poder incluir PHP en el contenido de la página, este enfoque obviamente no lo permite; PHP solo se puede usar para generar el contenido, no se incluye en el contenido, por lo tanto, la página se guardaría estáticamente en lugar de dinámicamente. Sin embargo, puede darle a la página una apariencia dinámica al volver a crear la página y su contenido (al proporcionar el ID de la página) cada vez que se llama. Su complemento se encargaría de cuándo y cómo ocurre esto, tal vez al monitorear $ _SERVER ["REQUEST_URI"]
Damian Green
2
En su respuesta, habla de evitar la eliminación accidental por parte del usuario. ¿Cómo haces eso?
GJ
0

Prueba esto:

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

Además de crear un archivo de plantilla personalizado y asignar esa plantilla a una página (como en el ejemplo de la respuesta aceptada), también existe una forma con la convención de nomenclatura de plantillas que WordPress usa para cargar plantillas (jerarquía de plantillas).

Cree una nueva página y use el slug de esa página para el nombre de archivo de la plantilla (cree un archivo de plantilla llamado page- {slug} .php ). WordPress cargará automáticamente la plantilla que se ajuste a esta regla.

Danijel
fuente
0

Simplemente cree un page-mytitle.phparchivo en la carpeta del tema actual y desde el Panel de control una página "mytitle" .

Luego, cuando invoques la página por la URL, verás page-mytitle.php. Debe agregar HTML, CSS, JavaScript, wp-loop, etc. a este archivo PHP ( page-mytitle.php).

Elias Katsaniotis
fuente
0

Puede agregar cualquier archivo php en su carpeta de temas activos como (/ wp-content / themes / your_active_theme /) y luego puede agregar una nueva página desde wp-admin y seleccionar esta plantilla de página desde las opciones de plantilla de página.

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

Y hay otra forma en la que puede incluir su archivo en functions.php y crear un código corto a partir de eso y luego puede poner ese código corto en su página de esta manera.

// CODE in functions.php 

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

Y luego puede usar este shortcode en la página lateral de wp-admin como esta [abc] .

Ajay Katariya
fuente
-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
fuente
-2

Puede nombrar su archivo "newpage.php" - póngalo en su directorio de temas en wp-content. Puede convertirlo en una plantilla de página (consulte 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, cree un tema secundario y póngalo allí, de modo que deje solo el código de su tema y sea más fácil de actualizar.

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

Chandra Kumar
fuente
El enlace está medio roto: se redirige dos veces y no hay ninguna subsección llamada "Crear sus propias plantillas de página" . Lo más cercano puede o no ser la subsección " Plantillas de página ". También está la página separada (mismo nombre) Plantillas de página
Peter Mortensen
-5

También puede usar directamente la página PHP, como crear la página PHP y ejecutarla con la ruta completa.

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

nim
fuente
Pero la función de traducción no funciona, por lo que por alguna razón no se cargará.
ram4nd