[Помогите] Как ограничить длину заголовка

Тема в разделе "Wordpress", создана пользователем ANATHEM, 28 авг 2008.

Статус темы:
Закрыта.
Модераторы: Sorcus
  1. ANATHEM

    ANATHEM Создатель

    Регистр.:
    19 авг 2007
    Сообщения:
    55
    Симпатии:
    7
    Есть необходимость ограничить длину выводимого заголовка. То есть что б отображало в заголовке записи только n симоволов, а дальше ставило троеточие (для того, что бы не переносило на следующую строку). Когда наводишь на забись выводится полное уже название. В общем нужно что то типа того, что есть на ag.ru в новостях ) Как это реализовать?
    Код:
    <a title="<?php the_title(); ?>" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
    Вот на контент ограничение реализовано так:
    Код:
    <?php the_content_limit(350, "[ЧИтать исчо >>]"); ?>
    Буду очень благодарен за ответ. Просьба расписать как для чайника )
     
  2. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
    ответ подробно расписан тут (английский, но все понятно)
    http://wordpress.org/support/topic/134258
    в файле functions.php который лежит в папке тэплейта надо вставить функцию
    PHP:
    <?php 

    function the_title2($before ''$after ''$echo true$length false) {
             
    $title get_the_title();

          if ( 
    $length && is_numeric($length) ) {

                 
    $title substr$title0$length );

              }

            if ( 
    strlen($title)> ) {

                 
    $title apply_filters('the_title2'$before $title $after$before$after);

                 if ( 
    $echo )

                    echo 
    $title;

                 else

                    return 
    $title;

              }

          }

    ?>
    и соответственно в файле index.php темы использовать эту функцию по назначению, например:
    PHP:
    <h1><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title2('''...'true'20'?></a></h1>
     
    DkWix и ANATHEM нравится это.
  3. ANATHEM

    ANATHEM Создатель

    Регистр.:
    19 авг 2007
    Сообщения:
    55
    Симпатии:
    7
    Спасибо)
    К сожалению, выходить чуть чуть криво. То ли из-за того что в UTF кириллицу как то странно режет, не наю.

    А можно как то приспособить функцию, которая есть на контент:
    Код:
    <?php function the_content_limit($max_char, $more_link_text = '(more...)', $stripteaser = 0, $more_file = '') {
        $content = get_the_content($more_link_text, $stripteaser, $more_file);
        $content = apply_filters('the_content', $content);
        $content = str_replace(']]>', ']]&gt;', $content);
        $content = strip_tags($content);
    
       if (strlen($_GET['p']) > 0) {
          echo "<p>";
          echo $content;
          echo "&nbsp;<a href='";
          the_permalink();
          echo "'>"."Read More &rarr;</a>";
          echo "</p>";
       }
       else if ((strlen($content)>$max_char) && ($espacio = strpos($content, " ", $max_char ))) {
            $content = substr($content, 0, $espacio);
            $content = $content;
            echo "<p>";
            echo $content;
            echo "...";
            echo "&nbsp;<a href='";
            the_permalink();
            echo "'>".$more_link_text."</a>";
            echo "</p>";
       }
       else {
          echo "<p>";
          echo $content;
          echo "&nbsp;<a href='";
          the_permalink();
          echo "'>"."Read More &rarr;</a>";
          echo "</p>";
       }
    }
    
    ?>
    Но она сильно намучено, что то там еще выискивает ))) наверное, можно её упростить и сделать для тайтл?
     
  4. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
    ну не знаю :) the_content_limit это совсем другая функция.... в ней все иначе - для других целей....
    попробуй заменить на multi-byte safe функции - mb_substr, mb_substr
    PHP:
    <?php 

    function the_title2($before ''$after ''$echo true$length false) {
             
    $title get_the_title();

          if ( 
    $length && is_numeric($length) ) {

                 
    $title mb_substr$title0$length );

              }

            if ( 
    mb_strlen($title)> ) {

                 
    $title apply_filters('the_title2'$before $title $after$before$after);

                 if ( 
    $echo )

                    echo 
    $title;

                 else

                    return 
    $title;

              }

          }

    ?>
    попробуй отпишись мне не начем проверять
     
    ANATHEM нравится это.
  5. ANATHEM

    ANATHEM Создатель

    Регистр.:
    19 авг 2007
    Сообщения:
    55
    Симпатии:
    7
    Помогло вроде бы как. Надо еще чуть шрифты покрутить, что б совсем ровно было.
    Еще осталась проблема - три точки ставит везде )))) даже в необрезанных заголовках
     
  6. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
    попробуй так, если что пиши тк я не проверяю что к чему!
    PHP:
    <?php 

    function the_title2($before ''$after ''$echo true$length false) {
            
            
    $title get_the_title();

            if ( 
    $length && is_numeric($length) ) {

                 
    $new_title mb_substr$title0$length );

            }

            if ( 
    mb_strlen($new_title)> ) {

                if(
    mb_strlen($title) > $length$title apply_filters('the_title2'$before $new_title $after$before$after);
                else 
    $title apply_filters('the_title2'$before $new_title $after$before$after);

                if (
    $echo) echo $title;
                else return 
    $title;

            }

    }

    ?> 
     
    ANATHEM нравится это.
  7. ANATHEM

    ANATHEM Создатель

    Регистр.:
    19 авг 2007
    Сообщения:
    55
    Симпатии:
    7
    Пасиб, но все равно ставит точки )
     
  8. alexzh

    alexzh

    Регистр.:
    13 сен 2006
    Сообщения:
    222
    Симпатии:
    88
    проверил работает
    PHP:
    function the_title2($before ''$after ''$echo true$length false) {
            
        
    $title get_the_title();

        if ( 
    $length && is_numeric($length) ) $new_title mb_substr$title0$length );

        if ( 
    mb_strlen($new_title)> ) {

            if(
    mb_strlen($title) > $length$title apply_filters('the_title2'$before $new_title $after$before$after);
            else 
    $title apply_filters('the_title2'$before $new_title $after ''$before$after);

            if (
    $echo) echo $title;
            else return 
    $title;

        }

    }
     
    q17g и ANATHEM нравится это.
Статус темы:
Закрыта.