PHP foreach循环打印不正确的索引

时间:2014-03-08 23:55:46

标签: php wordpress

我正在尝试为分页的WordPress帖子生成自定义链接文本。

使用<!--nextpage--><!--pagetitle: My Title-->,我会识别分页符并为下一页设置标题。

标题用作生成链接中的文本(而不是WordPress默认 - 平面数字)。


调用wp_link_pages_titled()将生成自定义链接并在页面上打印。


该功能按预期工作,并生成正确的链接,但我遇到<!--pagetitle: My Title-->不存在时使用的回退问题。

如果没有指定标题,我想恢复使用'Page [number]'作为链​​接文本。不幸的是,后退是打印错误的数字。

为了测试这个功能,我创建了一个包含3个分页部分的帖子,这些部分都没有标题。

链接应打印为

  • Page 1
  • Page 2
  • Page 3

但是打印为

  • Page 1
  • Page 1
  • Page 1

注意:主播的href属性正确,只显示的文字错误。

我在下面包含了foreach循环。我试图尽可能地评论PHP来描述正在发生的事情。

// For each paginated section
    foreach ( $pages as $ndx => $part_content) {
        $pageNumber = $ndx + 1;

        // Check to see if the pagetitle quick tag is present
        $has_part_title = strpos( $part_content, '<!--pagetitle:' );

        if( $has_part_title ) {
            $tagEnd = strpos( $part_content, '-->' );
            $title = trim( str_replace( '<!--pagetitle:', '', substr( $part_content, 0, $tagEnd ) ) );
        }
        $output .= ' ';

        // Generate a link to the $pageNumber -- Will not generate link for the current page
        if ( ($pageNumber != $page) || ((!$more) && ($page==1)) ) {
            $output .= _wp_link_page($pageNumber); // Page number is correct here - the link generated is accurate
        }

        echo 'Page Number: '.$pageNumber.' -- Link Generated <br /> '; // This is a test to check the value of $pageNumber. Value prints as expected

        // If the pagetitle is present, use it. If not, pring 'Page [$pageNumber]'
        $title = isset( $title ) && ( strlen( $title ) > 0 ) ? $title : 'Page '.$pageNumber;
        $output .= $link_before . $title . $link_after;

        echo 'Page Number Again: '.$pageNumber.' -- Title Generated <br> '; // This is a test to check the value of $pageNumber. Value prints as expected

        // Close the generated link -- will not execute when $pageNumber == the current page
        if ( ($pageNumber != $page) || ((!$more) && ($page==1)) ) {
            $output .= '</a>';
        }
    }

    // Close the "list"
    $output .= $after;
}

/*  Worth noting: Links are added to a single output string and printed in one go after the foreach executes.
    Seems like it would be better to print each link individually */
if ( $echo )
    echo $output; // When $output prints, the link text for every page is 'Page 1' for some reason, the page number here is not displayed correctly
return $output;

为什么echo $pageNumber;会打印正确的值,但'Page '.$pageNumber仅为每个链接打印'Page 1'?

我确信我错过了一些显而易见的东西,但我不知道它是什么。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

你的逻辑是关闭的。仔细考虑设置$title的行。

$title = isset( $title ) && ( strlen( $title ) > 0 ) ? $title : 'Page '.$pageNumber;

如果未设置$title(第一次迭代,$pageNumber为1),则将$title设置为“第1页”。从那时起,$title已设置且不会更改。您基本上说的是“如果我已将$title设置为某个值,请将其设置为等于”。