Отображение количества постов Wordpress в зависимости от длины заголовка - PullRequest
0 голосов
/ 03 ноября 2010

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

Однако я хотел бы отобразить заголовки сообщений и ссылку на конкретное сообщение, но поскольку пространство ограничено примерно 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;

 }

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

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

<?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 голосов
/ 03 ноября 2010

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

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

...