2014-01-15 6 views
0

Я имею установку WP бэкэнд - Blog pages show at most набор на 20.Wordpress изменить ограничение числа сообщений только для мобильных

Я хочу, чтобы переопределить этот параметр в моем PHP в случае, когда агент пользователя является мобильным.

Один из способов, который я имел в виду, -

$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"); 
    $android = strpos($_SERVER['HTTP_USER_AGENT'],"Android"); 
    $ipad = strpos($_SERVER['HTTP_USER_AGENT'],"iPad"); 
    $berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry"); 
    $ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod"); 

Тогда я думал, что сделать что-то вроде

if ($iphone || $android || $ipad || $ipod || $berry == true) 

, а затем установить новый предел пост 10.

ли в любом случае возможно?

Спасибо!

+0

Какие выгоды вы ожидаете? RSS-канал - это только XML-документ. Полоса пропускания, которую вы сохраняете, вероятно, незначительна, особенно если ответ на ваш сервер правильно gzipped. – pixelistik

+0

На данный момент у меня есть 20 сообщений на главной странице. Побывав на мобильном телефоне, я подумал, что для загрузки может потребоваться меньше времени, поскольку у каждого сообщения есть изображения и т. Д. Если бы было всего 10 сообщений, разве это не половина полосы пропускания? – tlt2w

+0

Главная страница не совпадает с фидами. Пожалуйста, проверьте http://codex.wordpress.org/WordPress_Feeds и http://codex.wordpress.org/Settings_Reading_Screen – pixelistik

ответ

2
add_action('pre_get_posts','change_limit_mobile'); 

function change_limit_mobile($query){ 

    $new_limit = 10; 

    $iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"); 
    $android = strpos($_SERVER['HTTP_USER_AGENT'],"Android"); 
    $ipad = strpos($_SERVER['HTTP_USER_AGENT'],"iPad"); 
    $berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry"); 
    $ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod"); 

    if (($iphone || $android || $ipad || $ipod || $berry) && $query->is_main_query()){ 
     set_query_var('posts_per_page',$new_limit); 
    } 
} 

Это перекроет сообщения на страницу на основе значения переменной $new_limit во всех ваших петлях. Если вы хотите настроить таргетинг только на домашнюю страницу, то вы можете добавить if(is_home()) в состояние.

+0

Я добавил это к своим функциям.php, но я не понимаю, как полностью реализовать этот код. Нужно ли мне когда-нибудь использовать '$ new_limit'? Мои циклы установлены с переменными '$ paged', поэтому, возможно, есть конфликт? – tlt2w

+0

'pre_get_posts' (http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts) запускается до запуска каждого запроса. Поэтому вам не нужно использовать переменную '$ new_limit' где угодно. Он автоматически отменяет задание по умолчанию от 20 до 10 сообщений на странице. –

+0

@ tlt2w Я внес незначительные изменения в указанный код. –

0

Мне удалось решить его по-другому.

На странице, где я хочу ограничить общее количество сообщений, я установил $new_limit равным 20 по умолчанию (так как я хочу 20 сообщений на странице). Затем я добавил условие, когда оно мобильное.

<?php 
$new_limit = 20; 

$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"); 
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android"); 
$ipad = strpos($_SERVER['HTTP_USER_AGENT'],"iPad"); 
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry"); 
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod"); 

?> 

Тогда предел установлен на 10, только на мобильном телефоне.

<?php if ($iphone || $android || $ipad || $ipod || $berry == true){ 
    $new_limit = 10;}?> 

Наконец, я добавил это в моем WP_Query:

'posts_per_page' => $new_limit, 

работает отлично насколько я тестировал

+0

Это будет работать нормально, но вам придется использовать этот код в каждом цикле. Использование 'pre_get_posts' устраняет этот недостаток, и у вас будет общий код для всех циклов в одном месте, без необходимости проверять наличие мобильного телефона в каждом цикле отдельно.Если вам это нужно только на одной странице, то ваше решение будет прекрасным :) Я дал обобщенное решение в моем ответе выше. –