limitează cuvintele din conținutul postării și adaugă un link "citește mai mult"
După cum poți vedea în cod, rutina afișează postarea care are un id
de 266
. Acum tot ce vreau este să limitez cuvintele afișate în conținutul acelei postări. Să spunem că vreau să limitez cuvintele la un număr de 300 și apoi să adaug un link "citește mai mult".
Acesta este codul pe care îl am până acum:
$post_id = 266;
echo "<div id='widgets-wrapper3'><div id='marginwidgets' style='overflow: auto; max-width: 100%; margin: 0 auto; border: none !important;'>";
$queried_post = get_post($post_id);
echo "<div class='thewidgets'>";
echo $queried_post->post_content;
echo '</div>';
echo "</div></div>";
?>

Am întâmpinat mereu aceeași problemă cu rezumatul articolului și conținutul postării. Există diverse cârlige și funcții în acest scop, așa cum a menționat @kaiser. Dar uneori ele nu fac exact ceea ce doresc.
Iată soluția mea - am creat propria funcție care preia conținutul postării și îl trunchiază la un număr specific de cuvinte:
function wpse69204_excerpt( $num_words = 20, $ending = '...', $post_id = null )
{
global $post;
// Trunchiază conținutul postării
$current_post = $post_id ? get_post( $post_id ) : $post;
$excerpt = strip_shortcodes( $current_post->post_content );
$excerpt = wp_trim_words( $excerpt, $num_words, $ending );
// Linkul "Citește mai mult"
$excerpt .= '<a href="' . get_permalink( $post ) . '" title="">Continuă lectura...</a>';
return $excerpt;
}

Tocmai am găsit wp_trim_words/*_excerpt()
. Lucru interesant de remarcat: Se ocupă și de limbi în care 1 caracter = semn, ca de exemplu chineza.

dar dacă există HTML în conținutul postării? va fi și acesta numărat în limita de cuvinte? nu vreau să includ tag-urile HTML și să le las pe post, astfel încât oriunde există HTML, doar conținutul pur să fie prins de funcție pentru limitarea numărului de cuvinte.

Funcția wp_trim_words
elimină toate tag-urile HTML. Vezi sursa aici

Există trei filtre care controlează link-ul »mai mult«, în funcție de ce funcție/Tag de șablon este utilizat. Partea proastă este că se interferează între ele. Partea bună este că poți modifica simplu ieșirea filtrului folosind current_filter()
pentru a prelua numele filtrului curent și a modifica ieșirea.
Apoi avem filtrul 'excerpt_length'
pentru a limita lungimea rezumatului. Acesta nu ne permite să adăugăm un link permanent, dar ne ajută în combinație cu celelalte filtre. Vezi al 2-lea plugin.
Pluginul permalink-more
Acest plugin adaugă link-ul permanent la conținut sau rezumat - în funcție de ce este afișat. De asemenea, resetează filtrul excerpt_more
pentru a nu afișa nimic, astfel încât să nu interfereze cu celelalte filtre.
<?php
/** Plugin Name: (#69204) »kaiser« Adaugă un link permanent la rezumat și conținut */
/**
* Modifică afișarea link-ului "mai mult"
*
* @param string $permalink
* @param string $text
* @return string $html
*/
function wpse69204_more_link( $output )
{
$html .= '<span class="post-more"> ';
$html .= sprintf(
'<a href="%s#more-%s" class="more-link" title="citește mai mult" >'
,get_permalink()
,get_the_ID()
);
$html .= '</a></span>';
// Suprascrie 'excerpt_more'
if ( 'excerpt_more' === current_filter() )
return;
// Taie conținutul pentru filtrul `get_the_excerpt`
$output = wp_trim_words( $output, 300 );
// Adaugă pentru rezumat
if ( 'get_the_excerpt' === current_filter() )
return $output.$html;
// Link-ul permanent pentru filtrul `the_content_more_link`
return $html;
}
# Link "Mai mult" pentru conținut
add_filter( 'the_content_more_link', 'wpse69204_more_link' );
add_filter( 'get_the_excerpt', 'wpse69204_more_link' );
add_filter( 'excerpt_more', 'wpse69204_more_link' );
Pluginul pentru lungimea rezumatului
Dacă vrei doar să modifici lungimea rezumatului, poți folosi o configurație mult mai simplă de filtre. Următorul plugin face o treabă foarte eficientă. Reduce conținutul (suntem în buclă și avem acces la datele postului) la 300 de cuvinte. În pasul următor, numără literele fiecărui cuvânt. Apoi returnează acest număr (atribuit dinamic).
<?php
/** Plugin Name: (#69204) »kaiser« Limitează lungimea rezumatului după numărul de cuvinte */
function wpse69204_excerpt_length( $length )
{
$to_count = array_splice( get_the_content(), 300 );
$i = 0;
foreach ( $to_count as $word )
{
$i += strlen( $word );
}
return $i;
}
add_filter( 'excerpt_length', 'wpse69204_excerpt_length' );
Note
- Ambele pluginuri sunt »zero configurație«. Doar încarcă, activează, gata.
- Va trebui să folosești
the_content()
sauthe_excerpt()
în tema ta pentru a beneficia de aceste pluginuri.

dar dacă există HTML în interiorul unui conținut de postare? ar fi și el numărat în limita de cuvinte? nu vreau să includ tag-urile HTML și să le las pe partea astfel încât ori de câte ori există HTML, doar conținutul pur să fie prins de funcție, care este să limiteze numărul de cuvinte.
