我有一个子页面的路由,我想使该子页面可用于多个子页面(扇形页面和扇形子页面)。扇区页面共享这些子页面,并使用我为扇区页面设置的菜单,在这些项目上循环并插入自定义链接。这样可以为扇区子页面加载正确的菜单。
我的问题是:如何修改主查询,以便以我自己的逻辑加载的帖子位于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 %}