cómo renderizar una plantilla de wordpress de una sola página con twig

4 minutos de lectura

avatar de usuario
Bazinga777

He estado intentando renderizar una plantilla de wordpress de una sola página con Twig, pero hasta ahora todo ha fallado.

{% extends 'layouts/base.twig' %}

{% block content %} 
    {% for page in pages() %}{{ set_up_page(page) }}                                
        {% include 'content/content-' ~ page.post_name ~ '.twig' %}
    {% endfor %}
{% endblock %}

Cómo se ve una de las plantillas:

<section id="about" {{ wp.post_class }}>
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2 class="section-heading">{{ wp.the_title }}</h2>
                <h3 class="section-subheading text-muted">{{ wp.get_post_meta(wp.get_the_ID() , 'st_page_subtitle', true)  }}</h3> <!-- To be Changed to subtext for title  -->
            </div>
        </div>
        <div class="row">
            <div class="col-lg-12">
             {{ wp.the_content }}
            </div>
        </div>
    </div>

Las funciones correspondientes:

        $wpgetpages = new Twig_SimpleFunction("pages", function() { 

                $currentID = get_the_ID();

                $menu_order = wp_get_nav_menu_items('header');

                $menu_items = array();

                foreach($menu_order as $item) {

                    $menu_items[] = $item->ID;
                }

                $args = array('post_type' => 'page',
                              'status' => 'publish',                                  
                              'exclude'=> $currentID,
                              'orderby' => 'menu_order',                                  
                              'order' => 'ASC'
                           );

                $pages = get_posts($args);

                return $pages;

        });     

        $wpsetpages = new Twig_SimpleFunction("set_up_page", function($arg) {   

                setup_postdata($arg);                       

        });

        self::$twig_environment->addFunction($wpposts);
        self::$twig_environment->addFunction($get_theme_options);
        self::$twig_environment->addFunction($wppostdata);          
        self::$twig_environment->addFunction($wpgetpages);
        self::$twig_environment->addFunction($wpsetpages);  

Esto resalta las plantillas pero establece el título de la página de la plantilla como el título de la página de inicio.ingrese la descripción de la imagen aquí

Realmente agradecería cualquier ayuda para arreglar esto.

  • No parece que haya compartido el código de la plantilla responsable de mostrar el título de la página…

    – rnevio

    24/09/2015 a las 17:29

  • @rnevius Agregué una de las plantillas que se representan

    – Bazinga777

    24/09/2015 a las 18:18

  • ¿Has intentado simplemente usar wp.title?

    – rnevio

    26/09/2015 a las 20:42

  • @ Bazinga777, ¿podría proporcionarnos (o enfatizar) el fragmento que contiene el código para configurar el título?

    – sitilo

    27 de septiembre de 2015 a las 7:55

  • @sitilge El wp.the_title es un proxy para el método wordpress the_title. Es raro que los contenidos de las páginas se muestren correctamente pero no los títulos de las mismas. Estoy usando el siguiente marco de tema github.com/zach-adams/sprig

    – Bazinga777

    27 de septiembre de 2015 a las 8:36

avatar de usuario
sitilar

No estoy seguro si entendí bien tu pregunta, pero cito un problema similar

En mi página de publicación única, estaba usando the_title en lugar de single_post_title.

Así que intenta cambiar

<h2 class="section-heading">{{ wp.the_title }}</h2>

a

<h2 class="section-heading">{{ wp.single_post_title }}</h2>

Además, ver relacionado:

Tu pregunta es un poco confusa. Pero si su problema principal es que todas las páginas individuales representadas en esta página única tienen el encabezado “INICIO”, esto debería funcionar.

Intenta cambiar esto:

<h2 class="section-heading">{{ wp.the_title }}</h2>

a esto:

<h2 class="section-heading">{{ wp.get_post_meta(wp.get_the_ID() , 'title', true) }}</h2>

Si funciona para el subtítulo, también debería funcionar para el título.

  • Ese es exactamente mi problema, pero ya había hecho get_the_ID() para lo mismo y devuelve el ID de la página actual, es decir, la página de inicio. Eso es lo que me confundió.

    – Bazinga777

    27/09/2015 a las 15:19

  • ¿Qué versión de WP estás usando? Intentaré recrear el error en mi cuadro de desarrollo.

    – cb0

    27/09/2015 a las 15:45

  • Estoy en 4.3.1, aquí está el enlace al tema en sí dropbox.com/s/6wxxkee7k6v8h40/sprig.zip?dl=0

    – Bazinga777

    27/09/2015 a las 15:54

Si está tratando de usar Twig dentro de un tema de WordPress, le recomiendo instalar un complemento llamado Timber. Se ocupa de gran parte de la complicada integración específica de WordPress para usted. Tienen un tema de inicio que puede consultar para tener una mejor idea de cómo armar su tema: https://github.com/timber/starter-theme

También tienen documentación completa, que puede encontrar aquí: https://github.com/jarednova/timber/wiki

¿Ha sido útil esta solución?