2

我已在我的函数文件中添加了可从共同作者网站获得的函数 posted_on。常规作者和合著者出现在单页上,但我似乎无法让它在作者存档页面上工作。当我单击共同作者的链接时,它会转到共同作者的正确网址,但显示的内容是针对普通作者的。我已经查看了共同作者的 github 问题,但对如何在我的树枝中实现共同作者感到非常困惑。

我确定 $context 我需要一些东西,但我真的不确定要在那里添加什么。

单.php

 <span class="author"><a href="{{post.author.link}}" rel="author"> 
     {{function('name_posted_on')}}</a>
  </span>

我有一个 author.php 文件

 $context = Timber::get_context();
 $args = 'post_type=post&numberposts=2';
 $context['posts'] = Timber::get_posts($args);

 Timber::render( array( 'author.twig'), $context );

在我的 author.twig 文件中:

<div class="col-md-12">

   //I need the author or co author to be displayed in the h3 and their posts in the loop

    <h3>Latest From {{posts.author.first_name}} {{posts.author.last_name}}</h3>
</div>
{% for post in posts %}

    <article class="latest-article-widget col-md-6">
        {% block author %}


            {% if post.get_thumbnail %}
                <img src="{{post.thumbnail.src}}" class="img-responsive" />
            {% endif %}

            <div class="author">
                <span>By:</span>
                <a href="" rel="author">{{post.author.first_name}} {{post.author.last_name}}</a>
            </div>
            <h1><a href="{{post.link}}">{{post.title}}</a></h1>
            {% for item in post.get_field('post_or_page_content') %}
            <p>{{item.standard_text_content|excerpt(25)}} <a href="{{post.link}}"></a></p>

            {% endfor %}
        {% endblock %}
    </article>
{% endfor %}
4

1 回答 1

1

将插件集成到 Timber 和 Twig 中并不总是很容易,因为许多插件依赖于循环,它基本上只适用于显示单个对象的模板文件。

通常我们需要手动将当前帖子的 ID 传递给函数。为此,函数需要能够将 ID 作为参数传递。使用 Co-Authors 插件,你很幸运。有一个get_coauthors函数,它接受一个帖子 ID 来返回所有作者,包括一个帖子的共同作者。此功能可能没有记录,但由插件内部使用。

让我们一步一步地了解如何使这项工作:

作者.php

<?php

$context = Timber::get_context();

$context['author'] = new \Timber\User( get_queried_object() );
$context['posts'] = Timber::get_posts();

Timber::render( array( 'author.twig' ), $context );

Timber 具有作者功能,但author属性仅设置在帖子对象上,而不是存档页面上。我们可以使用该get_queried_object()函数,它返回WP_User作者档案页面上当前帖子的对象。我们将其转换为Timber\User对象,以便在模板中更轻松、更通用地使用。

对于帖子,我们查询默认帖子,不带任何参数。这样,Timber 使用存档页面的默认值。当你传入参数时,就像你在

$context['posts'] = Timber::get_posts( 'post_type=post&numberposts=2' );

然后 Timber 将只针对您设置的两个参数进行查询,忽略为获取作者帖子而设置的查询参数。假设您将访问一个没有自己的帖子但仅与其他人的帖子合着的作者的存档,那么您将看不到该作者的存档中的任何帖子,因为 Co-Authors 插件挂钩到默认查询.

要使用现有参数并用我们自己的参数覆盖它们以便以后在 中使用它们Timber::get_posts(),我们可以使用wp_parse_args。我们将新参数作为第一个参数传递,主查询的查询变量作为要覆盖的默认参数。

<?php

global $wp_query;

// Set query args before posts are queried in get_context()
$args = wp_parse_args( array(
    'posts_per_page' => 2,
), $wp_query->query_vars );

$context = Timber::get_context();

$context['author'] = new \Timber\User( get_queried_object() );
$context['posts'] = Timber::get_posts( $args );

Timber::render( array( 'author.twig' ), $context );

作者.twig

<div class="col-md-12">
    <h3>Latest From {{ author.first_name }} {{ author.last_name }}</h3>
</div>

{% for post in posts %}
    <article class="latest-article-widget col-md-6">
        {% block author %}
            {% if post.get_thumbnail %}
                <img src="{{ post.thumbnail.src }}" class="img-responsive" />
            {% endif %}

            <div class="author">
                <span>By:</span>
                {% set authors = fn('get_coauthors', post.id) %}

                {% for author in authors %}
                    {% set author = TimberUser(author) %}

                    <a href="{{ author.link }}" rel="author">
                        {{ author.first_name }} {{ author.last_name }}
                    </a>{% if not loop.last %}, {% endif %}
                {% endfor %}
            </div>

            <h1><a href="{{ post.link }}">{{ post.title }}</a></h1>
            {% for item in post.get_field('post_or_page_content') %}
                <p>{{ item.standard_text_content|excerpt(25) }} <a href="{{     post.link }}"></a></p>
            {% endfor %}
        {% endblock %}
    </article>
{% endfor %}

现在get_coauthors开始发挥作用。在每个帖子的 for 循环中,我们可以使用

{% set authors = fn('get_coauthors', post.id) %}

fn简写(或function())可用于调用 Twig 中通常不可用的函数。我们传入当前帖子的帖子 ID 以获取该帖子的所有作者(默认作者和共同作者)。

然后我们遍历这些作者:

{% for author in authors %}
    {% set author = TimberUser(author) %}

    <a href="{{ author.link }}" rel="author">
        {{ author.first_name }} {{ author.last_name }}
    </a>{% if not loop.last %}, {% endif %}
{% endfor %}

为了能够获得每个作者的链接,我们将每个作者转换为一个Timber\User对象。

我希望这是你需要的。

关于可访问性的小说明

我看到你使用<h1>的帖子标题。您可能正在尝试实施文档大纲。虽然有很多博文向您展示如何做到这一点,但文档大纲尚未在任何浏览器中实现。通过仍然使用它,您会让使用辅助技术(如屏幕阅读器)的用户更难阅读您的页面。

于 2017-03-11T10:38:56.777 回答