WordPress木材路线:如何设置主要的WordPress帖子(以便body_class,is_page等工作)

时间:2018-07-24 10:28:06

标签: php wordpress timber

我有一个子页面的路由,我想使该子页面可用于多个子页面(扇形页面和扇形子页面)。扇区页面共享这些子页面,并使用我为扇区页面设置的菜单,在这些项目上循环并插入自定义链接。这样可以为扇区子页面加载正确的菜单。

我的问题是:如何修改主查询,以便以我自己的逻辑加载的帖子位于wordpress上下文中?我希望此类类,is_page,is_page_archive等能够正常工作,因为我根据这些类使用css。

<?php
// functions.php
function get_post_by_name( $name, $type = 'post', $output = OBJECT ) {
    global $wpdb;
    $post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type = %s", $name, $type ) );

    if ( $post ) {
        if ( $output === 'id' ) {
            return $post;
        }

        return get_post( $post, $output );
    }

    return null;
}

Routes::map( 'sectorsubpage/:sectorslug/:sectorsubslug', function ( $args ) {

    if (
        ( $sectorpage_id = get_post_by_name( $args['sectorslug'], 'page', 'id' ) ) &&
        ( $sectorsubpage = get_post_by_name( $args['sectorsubslug'], 'page' ) )
    ) {
        // simulate post parent for the theme.
        $sectorsubpage->post_parent = $sectorpage_id;


        Routes::load( 'sectorsubpage.php', compact( 'sectorsubpage', '$sectorpage_id' ) );
    }
} );

模板文件:

<?php

global $params;


$context = \Timber\Timber::get_context();
global $post;
$post            = new Timber\Post( $params['sectorsubpage'] );
$context['post'] = $post;

\Timber\Timber::render( [
    'sectorsubpage.twig',
    'sector-item.twig',
    'page.twig'
], $context );

Twig文件(TimberMenu是我编写的一个简单的twig函数,与TimberImage / TimberPost相同的操作方式):

// sectorsubpage.twig code (only related parts)
{% if parent.menu|default %}
    {# parent.menu is the id for a nav menu #}
    {% set menu = TimberMenu(parent.menu) %}
    {# make sure it is loaded/exists #}
    {% if menu.id %}
        <div id="sectoritem-list">
            <ul>
                {% for child in menu.items %}
                    <li>
                        <a href="{{ site.link }}/sectorsubpage/{{ parent.slug }}/{{ child.slug }}"{% if child.slug == post.slug %} class="active"{% endif %}>
                            {{ child.title }}
                        </a>
                    </li>
                {% endfor %}
            </ul>
        </div>
    {% endif %}
{% endif %}

0 个答案:

没有答案