首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后WP & Twig/Timber旁边显示索引

在后WP & Twig/Timber旁边显示索引
EN

Stack Overflow用户
提问于 2021-06-24 06:49:29
回答 2查看 526关注 0票数 0

我对WP和Twig/Timber都很陌生。我正在一个网站上工作,在那里我需要在WP帖子旁边显示一个数字:

  1. 第一篇文章
  2. 第二篇文章
  3. 第三篇文章

…诸若此类

我找不到关于怎么做的任何信息。我能用Twig/Timber实现这一点吗?而且,我对此不太了解,但如果建议使用ACF,我会对此持开放态度。

谢谢

编辑:我想在包含所有博客文章的页面和每一篇文章页面上显示帖子编号。

编辑2:我希望有一个强有力的解决方案,可以解释被删除的帖子

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-25 18:57:46

这是在Twig的循环变量中存在的东西,应该使它变得非常简单:

https://twig.symfony.com/doc/3.x/tags/for.html#the-loop-variable

票数 0
EN

Stack Overflow用户

发布于 2021-06-26 23:31:11

您可以使用Twig过滤器查询一个自定义post编号索引,该索引保存在一个瞬间:该顺序当前设置为菜单顺序,瞬态缓存1分钟。

Twig

代码语言:javascript
复制
{{ post.id|get_post_number }}

php

代码语言:javascript
复制
/**
 * 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;

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68110830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档