За последние 24 часа нас посетили 17175 программистов и 1646 роботов. Сейчас ищут 1495 программистов ...

Виджет

Тема в разделе "Wordpress", создана пользователем DePacos, 30 янв 2018.

  1. DePacos

    DePacos Новичок

    С нами с:
    25 ноя 2017
    Сообщения:
    9
    Симпатии:
    1
    Здравствуйте уважаемые форумчане, имеется виджет который выводит на главной странице заголовки новостей, подскажите как можно сделать, так, что бы выводился не весь заголовок целиком, а допустим только 30 первых символов заголовка. Заранее спасибо.

    PHP:
    1. <?php
    2. /** Функция для вывода записей по произвольному полю содержащему числовое значение.
    3. -------------------------------------
    4. Параметры передаваемые функции (в скобках дефолтное значение):
    5. num (10) - количество постов.
    6. key (views) - ключ произвольного поля, по значениям которого будет проходить выборка.
    7. order (DESC) - порядок вывода записей. Чтобы вывести сначала менее просматириваемые устанавливаем order=1
    8. format(0) - Формат выводимых ссылок. По дефолту такой: ({a}{title}{/a}). Можно использовать, например, такой: {date:j.M.Y} - {a}{title}{/a} ({views}, {comments}).
    9. days(0) - число последних дней, записи которых нужно вывести по количеству просмотров. Если указать год (2011,2010), то будут отбираться популярные записи за этот год.
    10. cache (0) - использовать кэш или нет. Варианты 1 - кэширование включено, 0 - выключено (по дефолту).
    11. echo (1) - выводить на экран или нет. Варианты 1 - выводить (по дефолту), 0 - вернуть для обработки (return).
    12. Пример вызова: kama_get_most_viewed("num=5 &key=views &cache=1 &format={a}{title}{/a} - {date:j.M.Y} ({views}) ({comments})");
    13. */
    14.  
    15. function kama_get_most_viewed($args='', $catId){
    16.     parse_str($args, $i);
    17.     $num    = isset($i['num']) ? $i['num']:10;
    18.     $key    = isset($i['key']) ? $i['key']:'views';
    19.     $order  = isset($i['order']) ? 'ASC':'DESC';
    20.     $cache  = isset($i['cache']) ? 1:0;
    21.     $days   = isset($i['days']) ? (int)$i['days']:0;
    22.     $echo   = isset($i['echo']) ? 0:1;
    23.     $format = isset($i['format']) ? stripslashes($i['format']):0;
    24.     global $wpdb,$post;
    25.     $cur_postID = $post->ID;
    26.  
    27.     if( $cache ){ $cache_key = (string) md5( __FUNCTION__ . serialize($args) );
    28.         if ( $cache_out = wp_cache_get($cache_key) ){ //получаем и отдаем кеш если он есть
    29.             if ($echo) return print($cache_out); else return $cache_out;
    30.         }
    31.     }
    32.  
    33.     if( $days ){
    34.         $AND_days = "AND post_date > CURDATE() - INTERVAL $days DAY";
    35.         if( strlen($days)==4 )
    36.             $AND_days = "AND YEAR(post_date)=" . $days;
    37.     }
    38.  
    39.     $sql = "SELECT p.ID, p.post_title, p.post_date, p.guid, p.comment_count, (pm.meta_value+0) AS views
    40.    FROM $wpdb->posts p
    41.        LEFT JOIN $wpdb->postmeta pm ON (pm.post_id = p.ID)
    42.    WHERE pm.meta_key = '$key' $AND_days
    43.        AND p.post_type = 'post'
    44.        AND p.post_status = 'publish'
    45.    ORDER BY views $order LIMIT $num";
    46.     $results = $wpdb->get_results($sql);
    47.     if( !$results ) return false;
    48.  
    49.     $out= '';
    50.     preg_match( '!{date:(.*?)}!', $format, $date_m );
    51.     foreach( $results as $pst ){
    52.         $x == 'li1' ? $x = 'li2' : $x = 'li1';
    53.         if ( (int)$pst->ID == (int)$cur_postID ) $x .= " current-item";
    54.         $Title = $pst->post_title;
    55.         $a1 = "<a class='r-news-link' href='". get_permalink($pst->ID) ."' ><span class='r-news-title'>".$Title."</span><span class='r-news-link-info'><span class='r-news-category'>".get_cat_name( $catId )."</span><span class='r-news-date'>".date_create($pst->post_date)->Format('j.m.y')."</span></span>";
    56.         $a2 = "</a>";
    57.         $comments = $pst->comment_count;
    58.         $views = $pst->views;
    59.         if( $format ){
    60.             $date = apply_filters('the_time', mysql2date($date_m[1],$pst->post_date));
    61.             $Sformat = str_replace ($date_m[0], $date, $format);
    62.             $Sformat = str_replace(array('{a}','{title}','{/a}','{comments}','{views}'), array($a1,$Title,$a2,$comments,$views), $Sformat);
    63.         }
    64.         else $Sformat = $a1.$a2;
    65.         $out .= "<li class='$x'>$Sformat</li>";
    66.     }
    67.  
    68.     if( $cache ) wp_cache_add($cache_key, $out);
    69.  
    70.     if( $echo )
    71.         return print $out;
    72.     else
    73.         return $out;
    74. }
    75.  
    76. $cl_news = '';
    77. if (is_front_page()) {
    78.     $cl_news = ' r-block-wb';
    79. }
    80. ?>
    81.  
    82.  
    83. <div class="r-block<?= $cl_news; ?>">
    84. <?php if ( ! empty( $title ) ) : ?>
    85.     <h4 class="r-block-title"><span><?php echo $title; ?></span></h4>
    86. <?php endif; ?>
    87. <div class="r-news">
    88.     <div id="r-news-tabs">
    89.         <ul class="resp-tabs-list">
    90.             <li>Новое</li>
    91.             <li>Самое читаемое</li>
    92.         </ul>
    93.         <div class="resp-tabs-container r-news-tabs-content">
    94.             <div class="resp-tab-content-active">
    95.                 <ul class="r-news-links">
    96.                     <?php $query = new WP_Query('cat='.$catId.'&posts_per_page='.$count.''); ?>
    97.  
    98.  
    99.                    
    100.                     <?php foreach( $query->posts as $my_post ) : ?>
    101.                         <li>
    102.                             <a class="r-news-link" href="<?php echo get_permalink($my_post->ID); ?>">
    103.                                 <span class="r-news-title"><?php echo $my_post->post_title; ?></span>
    104.  
    105.                                 <span class="r-news-link-info">
    106.                                                         <span class="r-news-category"><?php echo get_cat_name( $catId );?></span>
    107.                                                         <span class="r-news-date"><?php echo date_create($my_post->post_date)->Format('j.m.y'); ?></span>
    108.                                                     </span>
    109.                             </a>
    110.                         </li>
    111.                     <?php endforeach; ?>
    112.  
    113.                 </ul>
    114.             </div>
    115.             <div>
    116.                 <ul class="r-news-links">
    117.                     <?php kama_get_most_viewed("num=".$count."", $catId); ?>
    118.                 </ul>
    119.             </div>
    120.         </div>
    121.     </div>
    122. </div>
    123. </div>
    124. <?php wp_reset_postdata(); ?>
     
  2. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    После 54-ой строки: $Title=$pst->post_title; допиши $Title = substr($Title,0,30);
    Либо вообще замени её на $Title=substr($pst->post_title,0,30);
    Должно помочь
     
  3. DePacos

    DePacos Новичок

    С нами с:
    25 ноя 2017
    Сообщения:
    9
    Симпатии:
    1
    Большое спасибо, помогло, но только на одной вкладке, поясню...
    имеется сайт:http://fisafe.beget.tech/ на нем есть блок (виджет) вывода новостей "новое и самое читаемое"
    после правки 54-ой строки "самое читаемое" стало отображаться в одну строку, что собственно и нужно было, хотелось бы чтобы на вкладке "новое" заголовки новостей то же отображались в одну строку.
     
  4. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    Ну как по мне так это не решение, он слова режет. Я бы хотя-бы отрезал по последнему слову, но всё равно как-то не особо. А шрифт уменьшить??? - не вариант???
     
  5. DePacos

    DePacos Новичок

    С нами с:
    25 ноя 2017
    Сообщения:
    9
    Симпатии:
    1
    Если подскажите более рациональное решение или решение, как обрезать до последнего слова в обоих вкладках "новое и самое читаемое", буду очень признателен!
    --- Добавлено ---
    нет, есть заголовки где уменьшение шрифта не поможет...
     
  6. MRSgiba

    MRSgiba Активный пользователь

    С нами с:
    22 дек 2017
    Сообщения:
    200
    Симпатии:
    32
    Добавь в css элементу

    Код (CSS):
    1. span.r-news-title {
    2. height: 19px;
    3. overflow: hidden;
    4. display: block;
    5. }
    и из php удали все что правил
     
    #6 MRSgiba, 30 янв 2018
    Последнее редактирование модератором: 30 янв 2018
  7. DePacos

    DePacos Новичок

    С нами с:
    25 ноя 2017
    Сообщения:
    9
    Симпатии:
    1
    Большое Спасибо!
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    PHP:
    1. ?php echo wp_trim_words($recent->posts[$i]->post_content, 20, '...');?>
     
    denis01 нравится это.
  9. DePacos

    DePacos Новичок

    С нами с:
    25 ноя 2017
    Сообщения:
    9
    Симпатии:
    1
    Спасибо!
     
    denis01 нравится это.