Как передать идентификатор сообщения функции Twig / Timber, например edit_post_link?
Чтение документации на https://timber.github.io/docs/guides/functions/#function-with-arguments
Такая функция, как edit_post_link, попытается угадать идентификатор сообщения, которое вы хотите отредактировать, из текущего сообщения в The Loop. та же функция требует внесения некоторых изменений в файл, например archive.twig или index.twig. Здесь вам нужно будет явно передать идентификатор сообщения.
И вот что происходит; когда я использую это
{{ function('edit_post_link', 'Edit', '<span class="edit-link">', '</span>', post.ID) }}
в index.twig
все ссылки редактирования имеют идентификатор публикации страницы, на которой отображается цикл настраиваемых типов сообщений, а не идентификатор сообщения каждого настраиваемого типа сообщения, который находится в цикле.
Я использую функцию ниже в 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 %}
В результате все ссылки редактирования указывают на эту страницу, а не на каждый пользовательский тип сообщения «человек».
Так как мне позвонить по идентификатору поста? Нужно ли мне вызывать идентификатор сообщения в пользовательской функции типа сообщения?
В основном файле index.php есть стандартные функции Twig:
$context = Timber::get_context();
$context['posts'] = Timber::get_posts();
$templates = array( 'index.twig' );
Timber::render( $templates, $context );
person
является объектом сообщения (WP_Post
), попробуйтеperson.ID
вместоpost.ID
. - person Sally CJ   schedule 26.10.2018index.php
, как вы определяетеpeople
? Можешь показать код? - person Sally CJ   schedule 27.10.2018$context
нетpeople
($context['people']
)? Если да, то где это определяется? Если нет, то откудаpeople
? Может, вы сможете показать полный код в вашемindex.twig
файле? Или временно добавьте{{ fn( 'var_dump', person ) }}
в вашfor
цикл и поделитесь результатом. - person Sally CJ   schedule 27.10.2018{{ dump(person) }}
показало мне идентификатор, а использование{{ person.id }}
- отображение идентификатора в index.twig. Но это должен быть идентификатор в нижнем регистре, а не идентификатор. Но вся функция по-прежнему не работает. - person BlueDogRanch   schedule 29.10.2018people
. Или это что-то вродеget_posts( 'post_type=person' )
? А по функциям вы имеете в видуnewwindow_edit_post_link()
, верно? - person Sally CJ   schedule 29.10.2018{{ function('edit_post_link', ...) }}
не работает, и если да, то как это не работает? Нет вывода, не ожидаемый результат, или? - person Sally CJ   schedule 29.10.2018{{ function('edit_post_link', ...) }}
- person BlueDogRanch   schedule 29.10.2018{{ function( 'get_edit_post_link', person.id ) }}
, просто чтобы посмотреть, приведет ли это к правильному результату. - person Sally CJ   schedule 29.10.2018edit_post_link
доступным в Twig, используяTimber\Twig_Function
внутри хукаtimber/twig
. И используйте{{ edit_post_link(...) }}
. Если это все еще не работает, возможно, проблема вperson.id
. - person Sally CJ   schedule 29.10.2018{{ function( 'get_edit_post_link', person.id ) }}
.{{ person.id }}
действительно работает, поэтому я сделал ссылку для редактирования вручную, используя{% if user %}
для входа в систему. - person BlueDogRanch   schedule 29.10.2018front-page.php
), и у меня все сработало. - person Sally CJ   schedule 29.10.2018edit_post_link()
не вернет результат, если у текущего пользователя нет любые разрешения на редактирование сообщения. - person Sally CJ   schedule 29.10.2018