2010-11-03 2 views
0

У меня есть раскрывающееся меню навигации вверху темы, которую я разработал. В основном в навигации есть 2 столбца, и один из них отображает полученные заголовки сообщений (что легко).Дисплей X Количество сообщений Wordpress, основанных на длине заголовка

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

В принципе, если заголовок заголовка занимает до 40 символов, тогда я не хочу отображать какие-либо другие заголовки, в основном мне нужно объединить все заголовки сообщений и разработать, какие из них можно отобразить, чтобы они соответствовали символу предельные ограничения.

Пример того, что я имею в виду, в случае, если вы еще не можете понять, что я пытаюсь сделать.

СООБЩЕСТВО Заголовок сообщения | Другой почтовый заголовок

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

/* Fetches all post data from the Wordpress DB */ 
$fetched_posts = array(

    'community'  => get_posts('numberposts=3&tag=community'), 
    'communication' => get_posts('numberposts=3&tag=communication'), 
    'energy'  => get_posts('numberposts=3&tag=energy'), 
    'health'  => get_posts('numberposts=3&tag=health'), 
    'prosperity' => get_posts('numberposts=3&tag=prosperity'), 
    'simplicity' => get_posts('numberposts=3&tag=simplicity'), 
    'materials'  => get_posts('numberposts=3&tag=materials'), 
    'mobility'  => get_posts('numberposts=3&tag=mobility'), 
    'aesthetic'  => get_posts('numberposts=3&tag=aesthetic') 
); 

// Convert all array entries into variables 
extract($fetched_posts); 

/** 
* Show menu items will output items from a particular tagged category 
* but only as many that will fit in the navigation menu space. 
* 
* @param mixed $object 
* @param mixed $maximum 
*/ 
function show_menu_items($object, $maximum = 40) { 

    // Number of elements in the array 
    $total = 0; 

    // Total number of characters we've counted 
    $counted = 0; 

    // Store all of the titles for this particular object 
    foreach ($object as $object) { 
     $post_titles[] = $object->post_title; 
    } 

    // Store the total number of elements in the array 
    $total = count($post_titles); 

    // For every post title found count the characters 
    foreach ($post_titles as $post_title) { 
     if (strlen($post_title)) 
     $counted = $counted + strlen($post_title); 
    } 

    echo $counted; 

} 

ответ

1

Хорошо, я разработал решение. Это было нелегко, но в конечном итоге было разработано, как ограничить количество сообщений на основе ограничений символов. Несомненно, другие найдут этот ответ полезным, вот код:

<?php 

/* Fetches all post data from the Wordpress DB */ 
$fetched_posts = array(

    'community'  => get_posts('numberposts=3&tag=community'), 
    'communication' => get_posts('numberposts=3&tag=communication'), 
    'energy'  => get_posts('numberposts=3&tag=energy'), 
    'health'  => get_posts('numberposts=3&tag=health'), 
    'prosperity' => get_posts('numberposts=3&tag=prosperity'), 
    'simplicity' => get_posts('numberposts=3&tag=simplicity'), 
    'materials'  => get_posts('numberposts=3&tag=materials'), 
    'mobility'  => get_posts('numberposts=3&tag=mobility'), 
    'aesthetic'  => get_posts('numberposts=3&tag=aesthetic') 
); 

// Convert all array entries into variables 
extract($fetched_posts); 

/** 
* Show menu items will output items from a particular tagged category 
* but only as many that will fit in the navigation menu space. 
* 
* @param mixed $object 
* @param mixed $maximum 
*/ 
function show_menu_items($object, $maximum = 70) { 

    // Number of elements in the array 
    $total = 0; 

    // Total number of characters we've counted 
    $counted = 0; 

    // The counter for number of iterations 
    $counter = 0; 

    // Store all of the titles for this particular object 
    foreach ($object as $object) { 
     $post_titles[] = $object->post_title; 
    } 

    // Store the total number of elements in the array 
    $total = count($post_titles); 

    // If we actually have page nav items 
    if ($total != 0) { 

     // For every post title found count the characters 
     foreach ($post_titles as $post_title) { 

      // Count characters and keep counting for every title 
      $counted = $counted + strlen($post_title); 

      // Increment the counterizzle 
      $counter++; 

      // If the length is less than or equal to our maximum 
      if ($counted != $maximum) { 

       // Display the links 
       echo '<a href="#'.url_title($post_title, 'dash', TRUE).'">'.$post_title.'</a>'; 

       if ($counter != $total) { 
        echo ' | '; 
       } 

      } 

     } 

    } else { 
     echo 'No for this subject...'; 
    } 


} 

?> 
0

У вас есть это с strlen(). Просто продолжайте перебирать заголовки и добавляйте следующий заголовок, пока он еще меньше 40.

Проблема заключается в граничных случаях. Например, если заголовок имеет длину 38 символов. Он меньше 40, поэтому в приведенной выше логике добавляется | Next Heading, который будет содержать более 40 символов. Чтобы решить эту проблему, вам нужно либо взглянуть вперед на следующий заголовок, чтобы посмотреть, подходит ли это, либо добавить какое-то сокращение ваших заголовков, то есть Heading | Ne...ng

+0

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

Смежные вопросы