Yanıtlar:
UZMANLAR İÇİN TAM KILAVUZ
Kısa süre önce alıntılarla ilgili birkaç soruyu cevapladım, bu yüzden elimden geldiğince detaylı bir açıklama yapacağım.
ÖNSÖZ
Kodun nereye gitmesi gerektiğine dair bu cevaptan kaynaklanan birkaç soru var gibi görünüyor ve cevap, gerçekten size ve nasıl uygun gördüğünüze bağlı. Kodu yerleştirebileceğiniz birkaç seçenek vardır (açıkça belirtilmemişse):
Temanızın functions.php veya herhangi bir dosyada bir işlev dosyası olarak kullanın. Sadece bunu yaptığınızda hatırlayın, tema sizin değilse, temanızı yükseltirken tüm değişiklikler kaybolacak
Kodu bir çocuk temasında kullanmak daha iyi bir yol olacaktır. Yukarıdaki gibi, Fonksiyonlarda.
Bir eklenti kodu kullanın. Bu, kodu tüm temalar için kullanılabilir kıldığından tercih edilen yoldur. Tema değiştirirseniz, aynı kodu yeniden yazmak için endişelenmenize gerek yoktur.
Umarım bu işleri biraz temizler :-)
HTML ETİKETLERİ / FORMATLAMA
the_excerpt()
her şeyden önce herhangi bir parametre kabul etmiyor, bu yüzden hiçbir şey kendisine iletilemiyor. the_excerpt()
İçeriği 55 kelimeye kesen bir gerçektir ve metni döndürmeden önce tüm HTML etiketleri çıkarılır. the_excerpt()
bulunur / sonrası template.php wp-kapsamaktadır . Alıntıdaki bazı HTML etiketlerine izin vermek için, yeni bir alıntı oluşturulmalıdır.
Her şeyden önce, orijinal işlev ilk önce kaldırılmalı ve ardından yeni işlevin bağlanması gerekir get_the_excerpt
. Lütfen dikkat, bu yeni alıntı hala the_excerpt()
şablon dosyalarında olduğu gibi çağrılabilir olacak , değiştirmenize gerek kalmayacak. get_the_excerpt()
bulunur / sonrası template.php wp-kapsamaktadır .
Yazıyı wp_trim_excerpt
kesilmiş metni döndürmek için kullanır , bu nedenle önce yazıyı wp_trim_excerpt
filtreden kaldırmamız gerekir . wp_trim_excerpt()
bulunan wp-includes / formatting.php , çizgi 2355. Bu nasıl:
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
Artık yeni alıntılarınızı şuraya ekleyebilirsiniz. get_the_excerpt
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
Html etiketlerine / biçimlendirmelerine izin vermek için hangi etiketlere izin vermeniz gerektiğini belirtmemiz gerekir. Bunu strip_tags
elde etmek için aşağıdaki ifadeyi kullanabilirsiniz.
$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags());
İkinci argüman wpse_allowedtags()
etiketleri the_excerpt()
izin verecek şekilde eklemek için kullanılan küçük bir fonksiyondur . Geçerli bir HTML 5 etiketinin tam listesi için, buraya gidin ve buradan kontrol edin . İşte fonksiyon, izin vermeniz / saklamanız gereken herhangi bir html etiketi ekleyin.
function wpse_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>';
}
Tüm HTML etiketlerine izin vermeniz gerekiyorsa, yani, herhangi bir etiketin sıyrılmaması durumunda, strips_tags()
işlev tamamen atlanabilir / kaldırılabilir.
Bununla birlikte, dikkat edilmesi gereken nokta, html etiketlerine izin verildiğinde, bu etiketler sözcükler olarak sayılır, böylece etiketli ve etiketsiz alıntılar için kullanılan kelime sayınız aynı olmaz. Bunu düzeltmek için, bu etiketleri ilk önce gerçek kelime sayımından kaldırmanız gerekecek, böylece yalnızca kelimeler sayılacak.
Tüm etiketlere izin verecek, sadece kelimeleri kelime olarak sayacak ve belirli bir miktardaki sözcüklerden sonra bir cümleyi tamamlayacak bir cümle yazdım (böylece metin cümlenin ortasında kesilmez) ve son kelimeden sonra daha fazla metin ekleyin .
İşte kodun tamamı
function wpse_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>';
}
if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :
function wpse_custom_wp_trim_excerpt($wpse_excerpt) {
$raw_excerpt = $wpse_excerpt;
if ( '' == $wpse_excerpt ) {
$wpse_excerpt = get_the_content('');
$wpse_excerpt = strip_shortcodes( $wpse_excerpt );
$wpse_excerpt = apply_filters('the_content', $wpse_excerpt);
$wpse_excerpt = str_replace(']]>', ']]>', $wpse_excerpt);
$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */
//Set the excerpt word count and only break after sentence is complete.
$excerpt_word_count = 75;
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$tokens = array();
$excerptOutput = '';
$count = 0;
// Divide the string into tokens; HTML tags, or words, followed by any whitespace
preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens);
foreach ($tokens[0] as $token) {
if ($count >= $excerpt_length && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) {
// Limit reached, continue until , ; ? . or ! occur at the end
$excerptOutput .= trim($token);
break;
}
// Add words to complete sentence
$count++;
// Append what's left of the token
$excerptOutput .= $token;
}
$wpse_excerpt = trim(force_balance_tags($excerptOutput));
$excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . ' » ' . sprintf(__( 'Read more about: %s »', 'wpse' ), get_the_title()) . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
//$pos = strrpos($wpse_excerpt, '</');
//if ($pos !== false)
// Inside last HTML tag
//$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
//else
// After the content
$wpse_excerpt .= $excerpt_more; /*Add read more in new paragraph */
return $wpse_excerpt;
}
return apply_filters('wpse_custom_wp_trim_excerpt', $wpse_excerpt, $raw_excerpt);
}
endif;
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');
'//' fonksiyonunu sadece ekstra ihtiyacınız olan fonksiyonlardan kaldırabilirsiniz.
ÖZEL UZMANLIK UZUNLUKLARI
Bazen farklı uzunluklarda basit alıntılar göstermeniz gerekir ve her yazı / işlev / sayfa için bir alıntı yazmak uygun değildir. İşte kullanarak güzel bir küçük küçük fonksiyonwp_trim_words
function wpse_custom_excerpts($limit) {
return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . ' …' . __( 'Read more »', 'wpse' ) . '</a>');
}
Bu küçük işlevin alıyor mu get_the_excerpt
bunu kırparak, $limit
kullanıcı tarafından ayarlanan ve sonunda bir okuma daha bağlantıyı içeren metni dönüyor.
Bu alıntıyı şablonunuzdaki gibi arayabilirsiniz.
echo wpse_custom_excerpts($limit);
$limit
kelime sayınız nerede olacak, bu yüzden 30 kelimelik bir alıntı
echo wpse_custom_excerpts(30);
Burada hatırlanması gereken tek bir şey var; sınırınızı 55 kelimeden daha fazlaya ayarlarsanız, alıntı sadece 55 kelimelik uzunluğa sahip olduğundan yalnızca 55 kelime döndürülecek. Daha uzun bölümlere ihtiyaç duyulursa, get_the_content
bunun yerine kullanın.
ÖZEL AŞIRI UZUNLUK
Uzunluğunu değiştirmeniz gerekirse the_excerpt()
, aşağıdaki işlevi kullanabilirsiniz.
function wpse_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'wpse_excerpt_length', 999 );
Unutmayın, özel işleviniz varsayılandan sonra çalışacak şekilde 10'dan daha büyük bir öncelik belirlemeniz gerekir.
EKLE DEVAMINI OKU
Alıntıyla döndürülen tüm metinlerin [...]
sonunda tıklanamayan nefret vardır . Hellips yerine daha fazla metin okumak için bu işlevi kullanın.
function wpse_excerpt_more( $more ) {
return ' <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More', 'your-text-domain') . '</a>';
}
add_filter( 'excerpt_more', 'wpse_excerpt_more' );
DÜZENLE
Alıntı birinci paragraf
Bunu tam tutmak istiyorum, işte ilk paragraftan sonra kırpılan alıntı.
İşte HTML etiketlerini dokunuşta tutan, pasajın sonuna "Daha Fazla Oku" bağlantısı ekleyen ve pasajı ilk paragraftan sonra kesen bir fonksiyon.
if ( ! function_exists( 'wpse0001_custom_wp_trim_excerpt' ) ) :
function wpse0001_custom_wp_trim_excerpt($wpse0001_excerpt) {
global $post;
$raw_excerpt = $wpse0001_excerpt;
if ( '' == $wpse0001_excerpt ) {
$wpse0001_excerpt = get_the_content('');
$wpse0001_excerpt = strip_shortcodes( $wpse0001_excerpt );
$wpse0001_excerpt = apply_filters('the_content', $wpse0001_excerpt);
$wpse0001_excerpt = substr( $wpse0001_excerpt, 0, strpos( $wpse0001_excerpt, '</p>' ) + 4 );
$wpse0001_excerpt = str_replace(']]>', ']]>', $wpse0001_excerpt);
$excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . ' » ' . sprintf(__( 'Read more about: %s »', 'pietergoosen' ), get_the_title()) . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
//$pos = strrpos($wpse0001_excerpt, '</');
//if ($pos !== false)
// Inside last HTML tag
//$wpse0001_excerpt = substr_replace($wpse0001_excerpt, $excerpt_end, $pos, 0);
//else
// After the content
$wpse0001_excerpt .= $excerpt_more;
return $wpse0001_excerpt;
}
return apply_filters('wpse0001_custom_wp_trim_excerpt', $wpse0001_excerpt, $raw_excerpt);
}
endif;
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse0001_custom_wp_trim_excerpt');
Alıntıdan sonraki alıntıyı daha fazla göstermemesi için geçici bir süreye ihtiyaç duyan herhangi biri için, alıntı yapılan kelime miktarından daha kısa olduğunda, lütfen aşağıdaki soruya ve cevaba bakınız.
functions.php
. Sadece yukarıda o ekleyebilir if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :
senin içindefunctions.php
Eğer ihtiyacınız varsa daha fazla etiket ekleyin $allowed_tags = ...
function _20170529_excerpt($text) {
$raw_excerpt = $text;
if ( '' == $text ) {
//Retrieve the post content.
$text = get_the_content('');
//Delete all shortcode tags from the content.
$text = strip_shortcodes( $text );
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$allowed_tags = '<a>,<b>,<br><i>';
$text = strip_tags($text, $allowed_tags);
$excerpt_word_count = 55; /*** MODIFY THIS. change the excerpt word count to any integer you like.***/
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$excerpt_end = '[...]'; /*** MODIFY THIS. change the excerpt endind to something else.***/
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
$words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
if ( count($words) > $excerpt_length ) {
array_pop($words);
$text = implode(' ', $words);
$text = $text . $excerpt_more;
} else {
$text = implode(' ', $words);
}
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}
Ayrıca alıntılar için zengin metin düzenleyicisi ekleyebilir, eklenti dosyasına ya da theme function.php dosyasına aşağıdaki kodu ekleyebilir ve alıntılar için HTML düzenleyicisini görebilirsiniz. Dahası, HTML formatında da alıntılar yapacaktır. #cheers
Bunu bir yerden kopyaladım ama kaynağı hatırlamıyorum. Bunu tüm projelerimde kullanıyorum ve çalışıyor.
/**
* Replaces the default excerpt editor with TinyMCE.
*/
add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) );
class T5_Richtext_Excerpt
{
/**
* Replaces the meta boxes.
*
* @return void
*/
public static function switch_boxes()
{
if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
{
return;
}
remove_meta_box(
'postexcerpt', // ID
'', // Screen, empty to support all post types
'normal' // Context
);
add_meta_box(
'postexcerpt2', // Reusing just 'postexcerpt' doesn't work.
__( 'Excerpt' ), // Title
array ( __CLASS__, 'show' ), // Display function
null, // Screen, we use all screens with meta boxes.
'normal', // Context
'core', // Priority
);
}
/**
* Output for the meta box.
*
* @param object $post
* @return void
*/
public static function show( $post )
{
?>
<label class="screen-reader-text" for="excerpt"><?php
_e( 'Excerpt' )
?></label>
<?php
// We use the default name, 'excerpt', so we don’t have to care about
// saving, other filters etc.
wp_editor(
self::unescape( $post->post_excerpt ),
'excerpt',
array (
'textarea_rows' => 15,
'media_buttons' => FALSE,
'teeny' => TRUE,
'tinymce' => TRUE
)
);
}
/**
* The excerpt is escaped usually. This breaks the HTML editor.
*
* @param string $str
* @return string
*/
public static function unescape( $str )
{
return str_replace(
array ( '<', '>', '"', '&', ' ', '&nbsp;' ),
array ( '<', '>', '"', '&', ' ', ' ' ),
$str
);
}
}
function wpse_allowedtags() { // Add custom tags to this string return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; }
kafam karıştırabilirim nerede