Добавление запроса var в фильтры WordPress page_link приводит к фатальной ошибке PHP

Я создаю сайт WordPress, где я использую строку запроса для тематики цветов страницы, зависящих от поездки пользователя по сайту.

Чтобы передать текущую цветовую схему на следующую страницу, чтобы добавить непрерывность, я фильтрую ссылки на страницы и добавляю текущую строку запроса, если она существует. С помощью этого кода:

function append_query_string( $url, $post ) {
if( !empty( $_GET['type'] ) ){
return add_query_arg( 'type', $_GET['type'], $url );
} elseif ( is_page( array( 'sound', 'vfx' ) ) ) {
return add_query_arg( 'type', get_the_slug(), $url );
}
}
add_filter( 'page_link', 'append_query_string', 9, 2 );
add_filter( 'post_type_link', 'append_query_string', 10, 2 );

Оба фильтра работают нормально. За исключением одной страницы, где это вызывает проблемы с памятью. Я сузил это, чтобы быть вызванным фильтром ‘page_link’:

mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 93 bytes)

Я отредактировал лимит памяти и, к сожалению, это не помогло, когда у него было достаточно памяти, чтобы избежать ошибки памяти (которая была 512 МБ — я снова ее отбросил), я все еще не видел страницу.

У меня закончились идеи о том, что может вызвать это. Я первый, кто считает, что с моим кодом что-то не так, но не понимаю, почему сайт прекрасно работает на всех страницах, кроме одной.

Постскриптум Эта страница создает слайд-шоу видео, работает нормально, если я отключить фильтр «page_link»

0

Решение

Вы можете использовать куки:

add_action('init', 'myfunction');
function myfunction() {
// You should sanitize 'type' before using it
$type = $_GET['type'];
if( !empty( $type ) ) {
setcookie('current_color', $type, strtotime('+1 day'));
} elseif ( is_page( array( 'sound', 'vfx' ) ) ) {
setcookie('current_color', get_the_slug(), strtotime('+1 day'));
}
}

Тогда вы можете получить доступ к куки с $_COOKIE['current_color']

0

Другие решения

Других решений пока нет …