limitează cuvintele din conținutul postării și adaugă un link "citește mai mult"

15 oct. 2012, 01:27:08
Vizualizări: 18K
Voturi: 4

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>";    
?>
1
Comentarii

Există vreun progres în legătură cu această întrebare? Ai primit deja trei răspunsuri (la nivel înalt).

kaiser kaiser
26 nov. 2012 04:59:40
Toate răspunsurile la întrebare 2
3

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;
}
15 oct. 2012 04:26:04
Comentarii

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.

kaiser kaiser
15 oct. 2012 04:30:21

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.

Juliver Galleto Juliver Galleto
16 oct. 2012 01:03:51

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

Anh Tran Anh Tran
16 oct. 2012 04:01:40
2

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">&nbsp;';
    $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

  1. Ambele pluginuri sunt »zero configurație«. Doar încarcă, activează, gata.
  2. Va trebui să folosești the_content() sau the_excerpt() în tema ta pentru a beneficia de aceste pluginuri.
15 oct. 2012 04:17:15
Comentarii

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.

Juliver Galleto Juliver Galleto
16 oct. 2012 01:02:21

Nu, the_excerpt nu are tag-uri HTML. Sugestie: Încearcă mereu asta înainte de a raporta înapoi. Încercarea și eroarea sunt mai ușoare decât discuția și ghicitul :) Mulțumesc.

kaiser kaiser
16 oct. 2012 01:04:27