添加过滤器(‘The_Content’,‘...’)停止分页工作

时间:2014-04-03 作者:Tom Oakley

我有一个函数(它处理使用preg_replace_callback要用上传目录的URL/路径替换图像URL,让我们调用它replaceImgUrls()) 然后传递到add_filter(\'the_content\', \'replaceImgUrls\'). 这很好用,但在我添加分页的帖子上(<!--nextpage-->), 它阻止了这一切的发生;它无法拆分页面,但仍在内容底部显示正确数量的页码,您仍可以单击这些页码,但每个页面显示相同的内容(即帖子中的所有内容)。以下是我的函数,用于替换图像URL:

add_filter(\'the_content\', \'replaceImgURLS\');
function replaceImgURLS($content) {
    global $post;
    $content = $post->post_content;
    $newContent = preg_replace_callback(
        \'/<img.*src=[\\\'"]([^\\\'"]*)/i\', 
        function ($match) {
            global $post;
            $imgURL = $match[1];
            $filename   = basename($imgURL) . "-" . $post->ID . ".jpg"; // Create image file name
            $upload_dir = wp_upload_dir();
            $postMonth = mysql2date(\'m\', $post->post_date);
            $postYear = mysql2date(\'Y\', $post->post_date);
            $fileURL = $upload_dir[\'baseurl\'] . \'/\' . $postYear . "/" . $postMonth . "/" . $filename;

            return \'<img src="\' . $fileURL;
        }, 
        $content
    );
    return $newContent;
}
当我从functions.php 文件,分页将恢复并正常工作(即每个页面都被单独拆分)。我有wp_link_pages() 在我的content-single.php 模板文件。

感谢您的帮助:)

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

好吧,我想好了我该做什么@Rarst给了我一些指导,这对我有很大帮助,我认为他的想法(在他问题的评论中)会奏效,但我还没有实际测试过。无论如何,我通过添加$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; 和中的变量已更改$content = $post->post_content;$content = get_the_content();, 我通过了$paged in作为变量,如下所示:$content = get_the_content($paged);. 对我有效的最终代码如下所示:

add_filter(\'the_content\', \'replaceImgURLS\');
function replaceImgURLS($content) {
    $post = get_post();
    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
    $content = get_the_content($paged);
    $newContent = preg_replace_callback(
        \'/<img.*src=[\\\'"]([^\\\'"]*)/i\', 
        function ($match) {
            global $post;
            $imgURL = $match[1];
            $filename   = basename($imgURL) . "-" . $post->ID . ".jpg"; // Create image file name
            $upload_dir = wp_upload_dir();
            $postMonth = mysql2date(\'m\', $post->post_date);
            $postYear = mysql2date(\'Y\', $post->post_date);
            $fileURL = $upload_dir[\'baseurl\'] . \'/\' . $postYear . "/" . $postMonth . "/" . $filename;

            return \'<img src="\' . $fileURL;
        }, 
        $content
    );
    return $newContent;
}
希望这能帮助任何通过谷歌或其他任何地方来到这里的人:)

SO网友:Rarst

For POST由循环设置(请参见setup_postdata()) 它被拆分为多个部分,这些部分的数组被分配给全局$pages 变量即使它没有分页,这仍然是数据的去向。

那么这个变量实际上是get_the_content() 查找要处理和输出的帖子内容,而不是实际的帖子对象。

在函数中,您正在重写$content 过滤器为您提供(正确截断到所需页面)来自post对象的完整内容。通常,您应该坚持按数据过滤器提供的操作,访问全局范围,而不是很容易出现这样的问题。

结束

相关推荐

如何访问调用Apply_Filters()的函数中的变量?

我试图根据调用的函数中的变量是否apply_filters() 等于特定值。该变量不会传递给apply_filters() 参数。这或许可以解释我的意思:// function in wordpress core function get_var_b() { // generating $var_a $var_a = \"a\"; // some code ... $var_b = apply_filters(\'get_var_b\