RSSフィードウィジェットから[...]を削除したいです。
関数に以下を追加してみました。
function replace_Ellipsis($text) {
$return = str_replace('[...]', '-', $text);
return $return;
}
add_filter('get_the_excerpt', 'replace_Ellipsis');
ただし、これはウィジェットには影響しません。
何か手助け?
ここに提案があります:
wp_trim_words()
関数内でwp_widget_rss_output()
の出力をフィルター処理して、[…]
部分を削除します。次に、2つの方法でクリーンアップします。
現在のウィジェットが表示される前に、まず実行中のwp_trim_words()
フィルタを削除します。 widget_display_callback
にフックすることでそれを実現できます。つまり、私たちのフィルタコールバックは次のウィジェットではアクティブになりません。
それからフィルタコールバックが実行されている場合は、サイドバーの後ろからdynamic_sidebar_after
フックを通して削除します。これは、フィルタサイドコールが動的サイドバーの後に削除されることを意味します。それは例えば動的サイドバーにウィジェットが1つしかない場合に便利です。
これがデモプラグインです。
add_filter( 'widget_display_callback', function( $instance, $obj, $args )
{
// Cleanup before each widget
if( has_filter( 'wp_trim_words', 'wpse_replace_hellip' ) )
remove_filter( 'wp_trim_words', 'wpse_replace_hellip' );
// Target RSS widgets with summary
if(
'rss' === $obj->id_base
&& isset( $instance['show_summary'] )
&& 1 == $instance['show_summary']
) {
// Replace the […] part
add_filter( 'wp_trim_words', 'wpse_replace_hellip' );
// Clean up after dynamic sidebar
add_filter( 'dynamic_sidebar_after', 'wpse_extra_cleanup' );
}
return $instance;
}, 10, 3 );
function wpse_replace_hellip( $text )
{
if ( ' […]' == substr( $text, -11 ) )
$text = substr( $text, 0, -11 );
return $text;
}
function wpse_extra_cleanup()
{
remove_filter( current_filter(), __FUNCTION__ );
remove_filter( 'wp_trim_words', 'wpse_replace_hellip' );
}
さらにテストをしてあなたのニーズに適応できることを願っています!
デフォルトRSSウィジェット の本体は、関数 wp_widget_rss_output
によって生成されます。ソースからわかるように、[...]
はコードに組み込まれて直接エコーされます。フィード出力を簡単に操作するためのフィルタはありません。