Фильтры — Add_Filter('The_Content', '...') Останавливает Работу Нумерации Страниц

  • Автор темы Canor
  • Обновлено
  • 22, Oct 2024
  • #1

У меня есть функция (она связана с использованием

 content-single.php 
to replace Image URLs with URLs/paths to the uploads directory - lets call it wp_link_pages() ), который затем передается в functions.php . This works fine and stuff but on posts where I have added pagination ( 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; } ), это мешает этому работать; ему не удается разделить страницы, но он по-прежнему показывает правильное количество номеров страниц внизу контента, на который вы все равно можете щелкнуть, но на каждой странице отображается один и тот же контент (т. е. весь контент, который есть в сообщении). Вот моя функция, которая заменяет URL-адреса изображений:

<!--nextpage-->

Когда я удалю эту функцию из своего add_filter('the_content', 'replaceImgUrls') file, the pagination is restored and works as it should (i.e each page is split up separately). I have replaceImgUrls() в моем preg_replace_callback template file.

Спасибо за любую помощь :)

#filters #the-content #wp-link-pages

Canor


Рег
29 Apr, 2006

Тем
67

Постов
193

Баллов
548
  • 25, Oct 2024
  • #2

Для постов настраивается циклом (см.

 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;
}
 
) он разбивается на части, и массив этих частей присваивается глобальному $content = get_the_content($paged); variable. Even if it's not paginated this is still where data goes.

Тогда эта переменная на самом деле находится там, где $paged ищет контент сообщения для обработки и вывода, а не сам объект сообщения.

В вашей функции вы переопределяете $content = get_the_content(); filter gives you (properly truncated to the page necessary) with complete content from post object. Typically you should stick with acting on data filter gives you, accessing global scope instead of that is very prone to issues like this.

 

Andrasutp


Рег
17 Apr, 2004

Тем
84

Постов
196

Баллов
626
  • 25, Oct 2024
  • #3

Итак, я понял, что мне нужно было сделать. @Rarst дал мне несколько советов, которые очень помогли, и я думаю, что его идея (в комментариях к его вопросу) сработает, но я ее еще не проверял. В любом случае, я исправил это, добавив $content = $post->post_content; variable in, and, having changed $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; к $content , I passed get_the_content() в качестве переменной, так что это так: $pages . The final code which worked for me looks like this:

setup_postdata()

Надеюсь, это поможет любому, кто приходит сюда через Google или где-либо еще :)

 

Prerphity81


Рег
07 Apr, 2011

Тем
72

Постов
194

Баллов
564
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно