¿Cómo llamar a una función dentro de una página/entrada para generar contenido dinámicamente?

9 oct 2012, 09:04:30
Vistas: 50.3K
Votos: 4

Agregué la siguiente función al archivo functions.php

function contentGenerator($param) {
   if($param) {
      echo "Content true";
   } else {
      echo "Content false";
   }
}

¿Cómo puedo llamar a esta función dentro de una entrada de blog o página específica?

0
Todas las respuestas a la pregunta 2
0

Si estás hablando del contenido de una entrada o página, no es posible. Aquí hay tres formas diferentes de resolver tu problema. La primera forma te permitirá añadir el contenido generado dentro del contenido de tu entrada (o página). Las otras dos se imprimirán en uno de tus archivos de plantilla, por ejemplo, en tu single.php o page.php.

1. Shortcode

Esto está más o menos copiado/pegado de los ejemplos de la API de Shortcodes. Coloca esto en tu functions.php o en uno de tus plugins personalizados.

Puedes incluir la función en el editor WYSIWYG de tu entrada o página con la siguiente sintaxis:

[unique_shortcode_name foo="123" bar="medium"]

Coloca esto en tu functions.php o en uno de tus plugins personalizados:

add_shortcode('unique_shortcode_name', 'generate_content');
function generate_content($attributes) {
    // Analiza los parámetros/atributos y los hace disponibles como variables.
    extract(shortcode_atts(array(
        'foo' => 'valor predeterminado para foo',
        'bar' => 'valor predeterminado para bar',
    ), $attributes));

    // Genera el contenido
    $output = complex_content_generation_goes_here();

    return $output;
}

También puedes crear un shortcode que incluya contenido. Los shortcodes envolventes te permiten tomar texto como parámetro. Podría llamarse algo así:

[unique_shortcode_name foo="123"]Algún texto de entrada[/unique_shortcode_name]

Lee más sobre esto en la documentación de la API de Shortcodes.

2. Plantilla de página

Esto te dará la capacidad de establecer un archivo de plantilla específico para una página (esto no funcionará para entradas regulares). Aquí está la documentación sobre Plantillas de página.

Puedes basar tu plantilla en un archivo de plantilla ya existente, como page.php. El único requisito es que coloques un comentario multilínea al principio de tu archivo de plantilla así:

<?php
/*
Template Name: Página de Productos
*/
?>

Realmente no hay ningún requisito para el nombre del archivo, pero trata de no nombrarlo de forma que pueda ser detectado por WordPress a través de la jerarquía de plantillas (ver punto 3). Si lo haces, WordPress podría usar tu plantilla para otras páginas también, lo que te dará resultados inesperados.

Si has hecho lo anterior correctamente, deberías ver una sección de Plantilla con un menú desplegable bajo Atributos de página cuando estés editando o creando una página. Así:

Imagen mostrando la configuración de plantilla en la edición de una página

3. Jerarquía de Plantillas

La Jerarquía de Plantillas decide qué plantilla debe usarse para la vista de página actual y lo hace buscando un archivo apropiado por su nombre. Hay una imagen realmente descriptiva de la Jerarquía de Plantillas en el Codex. Por favor, examínala para entender mejor cómo funciona la Jerarquía de Plantillas.

10 oct 2012 10:03:14
4

contentGenerator($param);
simplemente coloca este código en el archivo page.php.
Si defines funciones en function.php, esas funciones pueden ser utilizadas en varios archivos de plantilla de tu tema.

9 oct 2012 09:17:01
Comentarios

Solo quiero agregar la función a una sola página (la página "Sobre mí") y no a todas las páginas. Quiero llamar a la función en una posición específica de esa página. Intenté llamar a la función agregando comandos PHP dentro del código HTML usando La función de prueba es <?php contentGenerator($true); ?> ., pero esto no funcionó.

Sven Sven
9 oct 2012 09:24:45

Si estás hablando del contenido de una entrada/página, no es posible. Lo que puedes hacer es agregar un shortcode y llamarlo. También podrías tener un archivo de plantilla específico o usar la jerarquía de plantillas para esa página.

hampusn hampusn
9 oct 2012 09:36:24

@hampusn por favor mueve esa información a una respuesta separada

Rarst Rarst
10 oct 2012 03:45:58

@Rarst Claro que sí. No tuve tiempo de escribir una respuesta más extensa pero la tendré lista en poco tiempo.

hampusn hampusn
10 oct 2012 09:30:10