1

我已经设置了一个高级自定义字段项目,以在自定义帖子类型的每个类别和存档的顶部显示特色图像、描述等。附图片

自定义帖子类型和分类是

$event_args = array(
    'has_archive'           => 'news-events',
    'exclude_from_search'   => false,
    'publicly_queryable'    => true,
    'rewrite'               => $event_rewrite,
    'capability_type'       => 'post',
);
register_post_type( 'events', $event_args );
register_taxonomy( 'event_category', array( 'events' ), $events_args );

在 archive-events.php 我有

$context['pagination'] = Timber::get_pagination();
$context['title'] = 'Archive Tours';
$context['posts'] = Timber::get_posts();
$content['events'] = Timber::get_terms('event_category');
Timber::render($templates, $context);

在树枝文件中

<div class="col-sm-12 col-md-12">
  <article class="post post-container">
    <div class="entry-header">
      <div class="post-thumb thumb">
        {% if events.featured_event_image %}
          <img src="{{TimberImage(events.featured_event_image).src}}"  alt="{{ events.featured_event_title }}"
               class="img-responsive" />
        {% else %}
          {# TODO: replace this with something we serve. #}
          <img src="http://placehold.it/500x340" alt="Default Thumbnail" class="img-responsive">
        {% endif %}
      </div>
    </div>
    <div class="sa_blog_content">
      <div class="sa_blog_center">
        <h4 class="sa_blog_title"><a target="_self" title="{{ events.featured_event_title }}" href="#">{{
            events.featured_event_title }}</a></h4>
        <div class="meta">
          <span><time datetime="{{post.post_date|date('F j, Y')}}">{{post.post_date|date('F j, Y')}}</time></span>
          <span>359 Views</span>
        </div>
      </div>
      {{ events.featured_event_summary }}
      <div class="tagcloud">
        {% for term in post.terms('featured_event_tags') %}
          <span><a href="{{post.term.link}}" title="{{post.term.name}}">{{post.term.name}}</a></span>
        {% endfor %}
      </div>
    </div>
  </article>
</div>

然而,存档或类别页面中没有我的客户字段可用。任何人都可以提出解决这个问题的方法。提前致谢...

4

1 回答 1

1

当你使用 时Timber::get_terms(),你会得到一个数组作为回报。

而不是检查是否存在自定义字段,{% if events.featured_event_image %}您可能必须遍历以下元素events

{% for event in events %}
    {% if event.featured_event_image %}
        {# your code #}
    {% endif %}
{% endfor %}

或者您可以直接访问数组的第一个元素

{% if event[0].featured_event_image %}

同理,{{ events.featured_event_summary }}不会出现,因为在数组上找不到字段featured_event_summary,但可能存在于数组的每个元素中。


当您使用 时{% for term in post.terms('featured_event_tags') %},您要求获取featured_event_tags分配给该帖子的分类的所有术语。从您的代码摘录中,我可以看到您仅注册event_category为分类法。在您的屏幕截图中,我可以看到这featured_event_tags是在分类上设置的自定义字段的名称event_category

要获取帖子的条款,您应该执行以下操作:

{% for term in post.terms('event_category') %}

在这个 for 循环中,您似乎试图获取该术语的链接和名称,但您从带有{{ post.term.link }}. 大概,应该是

{% for term in post.terms('event_category') %}
    {{ term.link }}

{{ post.term }}不起作用,因为term()它不是 Timber 的 Post 类的方法。只有terms()一种方法可以让您将所有术语分配给一个帖子。


这些都可能是您的代码中不会显示任何内容的原因。请记住,您还可以{{ dump( variable ) }}检查 Twig 中变量的内容。

如果您仍然遇到问题,请使用更多代码更新您的问题,我可以更新此答案。

于 2017-03-01T08:55:07.937 回答