确定在帖子中,您是否在第2页或更大页上-Wordpress文档通告

时间:2022-01-06 作者:Matt

我正在尝试运行一个只在任何帖子的第一页上执行的函数。因此,如果因为使用了<!--nextpage--> 标记,并且您位于该文章的第2页或更高页,则该函数不应运行。

Even the Wordpress documentation 对如何执行此操作感到困惑:

当显示的页面为“时”;已分页;。这是指一个归档文件或主页被拆分为多个页面,并将在第二页和后续页面上返回True。这并不是指内容已使用Next Page QuickTag划分为多个页面的帖子或页面。要检查帖子或页面是否已使用nextpage QuickTag划分为多个页面,请参阅A_Paged_Page部分

更多详细信息:

我目前在函数中使用以下代码。php将帖子中我的特色图片从第一段上方和标题下方的默认位置移动到第一段下方。

问题是,它还在同一篇文章的第2、3、4页等的同一位置显示了特色图像(当我使用<!--nextpage-->). 特色图片只应显示在任何文章的第一页。

add_filter( \'the_content\', \'insert_feat_image\', 20 );
function insert_feat_image( $content ) {
if (!is_single(array(xxxxx))) {
  global $post;
  if (has_post_thumbnail($post->ID)) {
    $caption = \'xxxx\';
    $img = \'xxx\';
    $content = xxx;
  }
  return $content;
}  else {
    $contentnormal = preg_replace(\'#(<p>.*?</p>)#\',\'$1\'.$img . $caption, $content, 1);}
     return $contentnormal;
}
我删除了一些与此问题无关的潜在识别代码(xxx)。

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

问题是,它还在同一篇文章的第2、3、4页等的同一个插页上显示了特色图像(当我使用<!--nextpage-->). 特色图片只能显示在任何文章的首页。

在这种情况下,这可能适用于您:

function insert_feat_image( $content ) {
    global $page, $multipage;

    if ( $multipage && $page <= 1 ) {
        // it\'s the 1st page, so run your code here.
    } // else, it\'s not paginated or not the 1st page

    return $content;
}
关于上述全局变量的说明:

  1. $multipage 是一个布尔标志,指示是否使用<!--nextpage--> 标签(或Page Break block 在古腾堡),只要帖子包含<!--nextpage--> 标记,并且已设置全局post数据,例如。the_post()setup_postdata() 已调用。(在循环内时为真)

    页码存储在$page, 但也可以使用get_query_var( \'page\' ). (是的page 而不是paged)

    如果您只想知道它是否是第一页,无论页面/帖子如何分页(以及only if 它已分页,或者在存档的情况下,这意味着有多个结果页),您可以尝试此操作,它应该适用于任何页面(单帖子/页面/CPT、类别存档、搜索结果页面等):

    function insert_feat_image( $content ) {
        global $page, $multipage, $paged, $wp_query;
    
        $page_num = max( 1, $page, $paged );
        /* Or you can use:
        $page_num = max( 1, get_query_var( \'page\' ), get_query_var( \'paged\' ) );
        */
    
        if ( ( $multipage || $wp_query->max_num_pages > 1 ) && $page_num <= 1 ) {
            // it\'s the 1st page, so run your code here.
        } // else, it\'s not paginated or not the 1st page
    
        return $content;
    }
    

SO网友:joshmoto

如果你想确定single.php 发布页面位于paged() 页码那么这将需要更多的逻辑。

但是,如果您只是尝试执行一个函数,如果一篇文章位于存档第一页上。。。那么这样做应该很直接。。。

<?=
// args
$args = [
  \'post_type\' => \'post\',
  \'posts_per_page\' => 10,
  \'paged\' => get_query_var(\'paged\') ? absint(get_query_var(\'paged\')) : 1
];

// setup query
$query = new WP_Query($args);

这将通过上述查询检测您所在的页面。。。

<?php

// if above query page number is 1
if($query[\'paged\'] === 1 ) {

  // do stuff

}
希望有意义。如果没有,请告诉我。

相关推荐

Calling hooks in functions

我习惯于使用主题挂钩,定期添加功能,但难以使用插件挂钩来过滤内容。这是我所知的极限,我试图理解这个过程,但没有用。我正在使用GigPress 管理事件。它允许您添加一个节目(基于日期),并将该节目与帖子(标准WP帖子)关联。我已经创建了一个自定义的帖子类型—productions—来关联节目,而不仅仅是一般的博客帖子。插件有一个钩子-gigpress_related_post_types —允许您用自己选择的任何CPT交换帖子。如果我直接编辑插件,它就会工作,将“帖子”替换为“产品”。如果我添加了我希望是