一种检测帖子在哪个页面上的方法

时间:2011-10-06 作者:Drew Gourley

我想知道是否有一个很好的方法来判断一篇文章来自哪个归档页面。我基本上只需要帖子在总顺序中的位置,然后除以“posts\\u per\\u page”选项。我现在遇到的问题是如何得到帖子所在的位置或偏移量。

编辑:全部在单个帖子模板上。

不管怎样,通常的$wp\\u query global和“page”/“paged”查询变量始终为0,所以这些变量不会影响我。

5 个回复
最合适的回答,由SO网友:Drew Gourley 整理而成

好吧,没关系。我通过在单个帖子模板的顶部执行以下操作来解决此问题:

$position_query = array( \'post_type\' => \'portfolio\', \'orderby\' => \'menu_order\', \'order\' => \'ASC\', \'numberposts\' => -1 );
$position_posts = get_posts($position_query); $count = 0;
foreach ($position_posts as $position_post) { $count++;
    if ($position_post->ID == $current_id) { $position = $count; break; }
}
$posts_per_page = get_option(\'posts_per_page\');
$result = $position/$posts_per_page;
$current_page = ceil($result);

SO网友:kaiser

如果您位于第2+页,则可以访问global $page, 它会告诉你当前的页码。还有其他一些值得一看(永远不知道哪一个存在/活动):global $multipage, $numpages;.

您还可以通过get_query_var(); 核心功能。基本上global $page 来自那里。

// Using get_query_var()
$paged = get_query_var(\'page\') ? get_query_var(\'page\') : false;

// Or via the global wp_query object
$paged = $GLOBALS[\'wp_query\']->query_vars[\'page\'] ? $GLOBALS[\'wp_query\']->query_vars[\'page\'] : false;

if ( $paged )
    // do stuff - @example echo "Current page is {$paged}";

SO网友:matpol

我只需要为单身人士准备这样的东西,并稍微简化了公认的答案:

  $position_query = array( \'post_type\' => \'post\',\'order\'=>\'DESC\', \'numberposts\' => -1 );
  $position_posts = get_posts($position_query); $count = 0;

  foreach ($position_posts as $position_post) { $count++;
        if ($position_post->ID == $post->ID) { $current_page = $count; break; }
   }

  $total_posts = count($position_posts);
这可以在以下上下文中使用:“第1页,共10页”1是$current\\u Page,10是$total\\u posts

SO网友:Mat Lipe

当面临同样的要求时,我选择使用直接MySQL调用来计算当前帖子所在的页面,而不必检索和循环此post\\u类型中的每个帖子。我之所以选择这条路线,是因为我发现在一个有数千篇帖子的网站上工作要快得多。

这种方法也可以放在函数/方法中,从任何地方确定。

function which_page_is_this_post_on( \\WP_Post $post ) : int {
    global $wpdb;
    return $wpdb->get_var( $wpdb->prepare( "SELECT CEIL(COUNT(*) / %d) from {$wpdb->posts} WHERE `ID` <= %d and post_type=%s and post_status=\'publish\'", get_option( \'posts_per_page\' ), $post->ID, $post->post_type ) );
}
如果发现经常调用它(如在模板中),可以根据需要将结果存储在对象缓存中。

function which_page_is_this_post_on( \\WP_Post $post ) : int {
    global $wpdb;
    $cached = wp_cache_get( __FUNCTION__ . $post->ID );
    if ( ! $cached  ) {
        $cached = $wpdb->get_var( $wpdb->prepare( "SELECT CEIL(COUNT(*) / %d) from {$wpdb->posts} WHERE `ID` <= %d and post_type=%s and post_status=\'publish\'", get_option( \'posts_per_page\' ), $post->ID, $post->post_type ) );
        wp_cache_set( __FUNCTION__ . $post->ID, $cached, 15 * MINUTE_IN_SECONDS );
    }
    return $cached;
}

SO网友:Mohit Bumb

我们有2个条件标记使其更简单

 <?php if(is_single())
    {
    echo "post";
    }
    elseif(is_page())
    {
    echo "page";
    } ?>
将其粘贴到文件中,该文件包含在页面和帖子中,并从“帖子”更改为(&P);“翻页”到您需要的任何地方。

结束

相关推荐

Show all posts in category

我试图显示每个类别中的所有帖子。我一直在四处搜索,似乎我需要slug 或term_id 如下面的代码所示。<?php query_posts(\'category_name=MyCategory&showposts=9999\'); ?> 我目前正在编辑archive.php 如何获取slug 名称谢谢