The_excerptに問題があり、どこにも答えが見つからない... the_excerptを介してリンクが表示されるときにリンクをクリック可能にしたいだけです。プラグインに頼るのではなく、このための機能が必要です。しかし、私はそれを見つけることができず、高度な抜粋プラグインは非常に複雑なので、この機能を実現するための小さな断片を見つけることができません。
あなたは私がここで見つけたスクリプトを使うことができます: http://aaronrussell.co.uk/legacy/improving-wordpress-the_excerpt/
抜粋にリンクを表示するように修正し、その他の機能をいくつか削除しました。
<?php
function keep_my_links($text) {
global $post;
if ( '' == $text ) {
$text = get_the_content('');
$text = apply_filters('the_content', $text);
$text = str_replace('\]\]\>', ']]>', $text);
$text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text);
$text = strip_tags($text, '<a>');
}
return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'keep_my_links');
?>
それを修正する部分は$text = strip_tags($text, '<a>');
です。 remove_filter('get_the_excerpt', 'wp_trim_excerpt');
と共に
このコードでは基本的に、通常はWordPressによって削除された抜粋で、カンマ区切りのHTMLタグのリストを使用できます。創世記と作品でテスト済み。
add_filter( 'get_the_content_limit_allowedtags', 'get_the_content_limit_custom_allowedtags' );
function get_the_content_limit_custom_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>';
}
出典 http://daan.kortenba.ch/add-tags-to-genesis-content-limit-in-content-archives/ /
WordPressはwp_trim_words()
によって呼び出されるget_the_excerpt()
のタグを削除します。そのため、 'wp_trim_words'をフィルタリングする必要があります。基本的にその関数を1回の変更でコピーします。wp_strip_all_tags()
をstrip_tags()
に置き換えます。
wp_trim_words
を実行する他の関数を変更したくないので、get_the_excerpt()
の実行中にフィルタを追加し、完了したら削除します。
// Allow links in excerpts
function sg_trim_words( $text, $num_words, $more, $original_text ) {
$text = strip_tags( $original_text, '' );
// @See wp_trim_words in wp-includes/formatting.php
if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
$text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
preg_match_all( '/./u', $text, $words_array );
$words_array = array_slice( $words_array[0], 0, $num_words + 1 );
$sep = '';
} else {
$words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
$sep = ' ';
}
if ( count( $words_array ) > $num_words ) {
array_pop( $words_array );
$text = implode( $sep, $words_array );
$text = $text . $more;
} else {
$text = implode( $sep, $words_array );
}
// Remove self so we don't affect other functions that use wp_trim_words
remove_filter( 'wp_trim_words', 'sg_trim_words' );
return $text;
}
// Be sneaky: add our wp_trim_words filter during excerpt_more filter, which is called immediately prior
function sg_add_trim_words_filter( $excerpt_length ) {
add_filter( 'wp_trim_words', 'sg_trim_words', 10, 4 );
return $excerpt_length;
}
add_filter( 'excerpt_more', 'sg_add_trim_words_filter', 1 );
私はこれをもっとターゲットを絞った解決策だと思うので、私は このGist を他の提案された方法を検討した後に書きました。要旨は今後更新されます。