如何将post id传递给编辑post链接之类的twig/timber函数?
在https://timber.github.io/docs/guides/functions/#function-with-arguments阅读文档
一个类似edit_post_link的函数将尝试猜测帖子的id
您要从循环中的当前帖子进行编辑。相同的功能
需要对archive.twig或index.twig等文件进行一些修改。
在那里,您需要显式地传递post id。
当我用这个的时候{{ function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>', post.ID) }}
在index.twig
中,所有编辑链接都具有显示自定义文章类型循环的页的文章ID,而不是循环中每个自定义文章类型的文章ID。
我在functions.php中使用了下面的函数,它还强制在编辑链接上使用target="_blank"
:
add_filter( 'edit_post_link', 'newwindow_edit_post_link', 10, 3 );
global $post;
$post_id = $post->ID;
function newwindow_edit_post_link( $link, $post_id, $text ) {
if( !is_admin() )
$link = str_replace( '<a ', '<a target="_blank" ', $link );
return $link;
}
这是
index.twig
上的基本循环。“人物”是标准的wordpress自定义帖子类型: {% if people %}
{% for person in people %}
<a href="{{ person.link }}">{{ person.name }}</a>
{{ function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>', post.ID) }}
{% endfor %}
{% else %}
{% endif %}
这会导致所有指向该页的编辑链接,而不是每个自定义文章类型“person”。
那我该怎么称呼邮递员呢?我需要在自定义post type函数中调用post id吗?
主index.php文件具有标准的twig函数:
$context = Timber::get_context();
$context['posts'] = Timber::get_posts();
$templates = array( 'index.twig' );
Timber::render( $templates, $context );
最佳答案
那我该怎么称呼邮递员呢?
如果people
模板中循环中的index.twig
是一个post数组(即每个post是一个WP_Post
/Timber\Post
实例),则可以(或应该能够)通过person.ID
或person.id
检索post id(是的,两者实际上都是set)。所以这些对我很有效:
{{ function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>', person.id) }}
{{ function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>', person.ID) }}
我是怎么证实的
我安装并激活了official Timber starter theme。
我创建了
front-page.php
:<?php
$context = Timber::get_context();
// Here, I defined the `people`.
$context['people'] = Timber::get_posts( [
'post_type' => 'post', // yours would be 'person' and not 'post'
'posts_per_page' => 3,
] );
// This I used for testing only.
$context['post'] = new Timber\Post();
$templates = array( 'front-page.twig' );
Timber::render( $templates, $context );
然后我创建了
templates/front-page.twig
:{% extends "base.twig" %}
{% block content %}
<h2>The queried page's title: {{ post.title }}</h2>
<p>The queried page's ID: <b>{{ post.id }}</b></p>
{% if people %}
{% for person in people %}
<a href="{{ person.link }}">{{ person.name }}</a>
{{ function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>', person.id) }}<br>
{% endfor %}
{% else %}
{% endif %}
{% include 'partial/pagination.twig' with { pagination: posts.pagination({show_all: false, mid_size: 3, end_size: 2}) } %}
{% endblock %}
一切对我来说都很好,
edit_post_link()
被正确调用,并在标记中显示带有target="_blank"
的post链接。(我把newwindow_edit_post_link
的东西放进functions.php
)