2014-01-15 54 views
0

我有WP後臺設置 - Blog pages show at most設置爲20WordPress的改變的職位數的限制只是移動

我要重寫我的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文檔。您保存的帶寬可能可以忽略不計,特別是當您的服務器的響應被正確地解壓縮時。 – pixelistik

+0

目前我在主頁上有20個帖子。一旦進入移動設備,我認爲可能需要更少的時間來加載,因爲每個帖子都有圖片等。如果只有10個帖子,是不是帶寬的一半? – tlt2w

+0

Frontpage與Feed不同。請檢查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

我已經將此添加到我的functions.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'消除了這個缺點,並且您將在一個地方爲所有循環創建一個通用代碼,而無需在每個循環中單獨檢查移動。如果你只在一個頁面上需要這個,那麼你的解決方案非常好:)我在上面的答案中給出了一個通用的解決方案。 –

相關問題