在 post 旁边显示索引 — WP & Twig/Timber
Display an index next to a post — WP & Twig/Timber
我是 WP 和 Twig/Timber 的新手。我在一个网站上工作,我需要在 WP post 旁边显示一个数字,如下所示:
- 第一个post
- 第二个post
- 第三个post
…等等
我找不到有关如何操作的任何信息。我可以用 Twig/Timber 实现吗?另外,我对此了解不多,但如果建议为此使用 ACF,我会接受它。
谢谢
编辑:我想在包含所有博客post的页面和每个post页。
编辑 2:我希望有一个强大的解决方案可以解决已删除的 posts
这是存在于 Twig 循环变量中的东西,应该使它变得超级简单:
https://twig.symfony.com/doc/3.x/tags/for.html#the-loop-variable
您可以使用 Twig 过滤器查询保存在瞬态中的自定义 post 数字索引:顺序当前设置为菜单顺序,瞬态缓存 1 分钟。
树枝
{{ post.id|get_post_number }}
php
/**
* Adds functionality to Twig.
*
* @param \Twig\Environment $twig The Twig environment.
* @return \Twig\Environment
*/
add_filter( 'timber/twig', 'add_to_twig' );
function add_to_twig( $twig ) {
// Adding functions as filters.
$twig->addFilter( new Timber\Twig_Filter( 'get_post_number', 'get_post_number_by_id' ) );
return $twig;
}
/**
* Get post number from ID, based on menu order.
*
* @param [type] $id
* @return void
*/
function get_post_number_by_id( $id ) {
// Check we have a string
$target_id = strval( $id );
// Save quesry and index in transient
$post_number_index = Timber\Helper::transient(
'get_post_number_by_id',
function () {
// Update parameters to match desired search order
$args = array(
'orderby' => 'menu_order',
'posts_per_page' => -1,
'post_status' => 'publish',
);
// Query
$posts = get_posts( $args );
if ( !empty( $posts ) ) {
// Store list
$data = [];
// Set post numer count
$count = 0;
// build index.
foreach( $posts as $post ) {
$data[ $post->ID ] = array(
'post_id' => $post->ID,
'post_number' => ++$count,
);
}
return !empty( $data ) ? $data : false;
}
return false;
},
MINUTE_IN_SECONDS
);
// Retrun post number
if ( !empty ( $post_number_index ) && array_key_exists( $target_id, $post_number_index ) ) {
return $post_number_index[ $target_id ]['post_number'];
}
return false;
}
我是 WP 和 Twig/Timber 的新手。我在一个网站上工作,我需要在 WP post 旁边显示一个数字,如下所示:
- 第一个post
- 第二个post
- 第三个post
…等等
我找不到有关如何操作的任何信息。我可以用 Twig/Timber 实现吗?另外,我对此了解不多,但如果建议为此使用 ACF,我会接受它。
谢谢
编辑:我想在包含所有博客post的页面和每个post页。
编辑 2:我希望有一个强大的解决方案可以解决已删除的 posts
这是存在于 Twig 循环变量中的东西,应该使它变得超级简单:
https://twig.symfony.com/doc/3.x/tags/for.html#the-loop-variable
您可以使用 Twig 过滤器查询保存在瞬态中的自定义 post 数字索引:顺序当前设置为菜单顺序,瞬态缓存 1 分钟。
树枝
{{ post.id|get_post_number }}
php
/**
* Adds functionality to Twig.
*
* @param \Twig\Environment $twig The Twig environment.
* @return \Twig\Environment
*/
add_filter( 'timber/twig', 'add_to_twig' );
function add_to_twig( $twig ) {
// Adding functions as filters.
$twig->addFilter( new Timber\Twig_Filter( 'get_post_number', 'get_post_number_by_id' ) );
return $twig;
}
/**
* Get post number from ID, based on menu order.
*
* @param [type] $id
* @return void
*/
function get_post_number_by_id( $id ) {
// Check we have a string
$target_id = strval( $id );
// Save quesry and index in transient
$post_number_index = Timber\Helper::transient(
'get_post_number_by_id',
function () {
// Update parameters to match desired search order
$args = array(
'orderby' => 'menu_order',
'posts_per_page' => -1,
'post_status' => 'publish',
);
// Query
$posts = get_posts( $args );
if ( !empty( $posts ) ) {
// Store list
$data = [];
// Set post numer count
$count = 0;
// build index.
foreach( $posts as $post ) {
$data[ $post->ID ] = array(
'post_id' => $post->ID,
'post_number' => ++$count,
);
}
return !empty( $data ) ? $data : false;
}
return false;
},
MINUTE_IN_SECONDS
);
// Retrun post number
if ( !empty ( $post_number_index ) && array_key_exists( $target_id, $post_number_index ) ) {
return $post_number_index[ $target_id ]['post_number'];
}
return false;
}