Пользовательская функция для ограничения длины выдержки возвращает заголовок записи как часть выдержки (WP) - PullRequest
0 голосов
/ 28 февраля 2012

Я добавил следующее в functions.php:

function excerpt($limit) {
global $id;
  $excerpt = explode(' ', get_the_excerpt(), $limit);
  if (count($excerpt)>=$limit) {
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt).'... <p class="readmore"><a href="'. get_permalink($id) . '" title="' . the_title_attribute( array('echo' => 0, 'before' => 'Permalink to: ', 'after' => '')) . the_title() . '">Read More &#187;</a></p>';
  } else {
$excerpt = implode(" ",$excerpt).'... <p class="readmore"><a href="'. get_permalink($id) . '" title="' . the_title_attribute( array('echo' => 0, 'before' => 'Permalink to: ', 'after' => '')) . the_title() . '">Read More &#187;</a></p>';
  } 
  $excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
  return $excerpt;
}

и по какой-то причине он возвращает заголовок поста как часть выдержки (заголовок поста идет первым, затем выдержка без пробела между заголовком и выдержкой - пример здесь: http://autisticadvocacy.uniongraphics.org/category/news/). Может кто-нибудь сказать мне, кто я делаешь неправильно?

Ответы [ 2 ]

1 голос
/ 29 февраля 2012
$excerpt = implode(" ",$excerpt)
  . '... <p class="readmore"><a href="'
  . get_permalink($id)
  . '" title="'
  . the_title_attribute(array(
         'echo'   => 0, 
         'before' => 'Permalink to: ', 
         'after' => ''))
  ### change is in this line. (the_title() removed)
  . '">Read More &#187;</a></p>'
  ;

То, как вы пишете код, очень трудно читать, и поэтому трудно отлаживать, когда вы сталкиваетесь с проблемами.Попробуйте улучшить это.Полезная функция для лучшего форматирования строк: sprintf():

$excerpt = sprintf('%s ... <p class="readmode"><a href="%s" title="%s">Read More &#187;</a></p>'
    , implode(" ",$excerpt), get_permalink($id)
    , the_title_attribute(array('echo' => 0, 'before' => 'Permalink to: ', 'after' => ''))
);
0 голосов
/ 23 января 2015

Добавьте следующий код в файл functions.php для выдержки и содержимого.

<?php
// Custom Excerpt 
function excerpt($limit) {
$excerpt = explode(' ', get_the_excerpt(), $limit);
if (count($excerpt)>=$limit) {
array_pop($excerpt);
$excerpt = implode(" ",$excerpt).'...';
} else {
$excerpt = implode(" ",$excerpt);
} 
$excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
return $excerpt;
}

// Content Limit 
function content($limit) {
$content = explode(' ', get_the_content(), $limit);
if (count($content)>=$limit) {
array_pop($content);
$content = implode(" ",$content).'...';
} else {
$content = implode(" ",$content);
} 
$content = preg_replace('/\[.+\]/','', $content);
$content = apply_filters('the_content', $content); 
$content = str_replace(']]>', ']]&gt;', $content);
return $content;
}
?>

Теперь вместо использования в вашем цикле the_content () или the_excerpt используйте excerpt ($ limit) или content ($ limit).

Если вы хотите ограничить свою выдержку 300 словами, код будет выглядеть следующим образом:

<?php echo excerpt(50); ?>
<?php echo content(300); ?>

У меня есть другой способ отобразить ограниченную выдержку за символ.Вот код файла functions.php.

function get_excerpt(){
$excerpt = get_the_content();
$excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
$excerpt = strip_shortcodes($excerpt);
$excerpt = strip_tags($excerpt);
$excerpt = substr($excerpt, 0, 100);
$excerpt = substr($excerpt, 0, strripos($excerpt, " "));
$excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
$excerpt = $excerpt.'... <a href="'.get_the_permalink().'">Read More</a>';
return $excerpt;
}

После этого вам нужно добавить место, где вы хотите отображать свой символ за символом.

<?php echo get_excerpt(); ?>

Источник: http://www.e2soft.com/blog/custom-excerpt-and-content-limit-wordpress/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...