如何将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.IDperson.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

08-27 16:53