web-dev-qa-db-ja.com

RSSフィードから[...]を削除しますか?

RSSフィードウィジェットから[...]を削除したいです。

関数に以下を追加してみました。

function replace_Ellipsis($text) {

$return = str_replace('[...]', '-', $text);
 return $return;
}
add_filter('get_the_excerpt', 'replace_Ellipsis');

ただし、これはウィジェットには影響しません。

何か手助け?

3
user18577

ここに提案があります:

  • まず、要約があるRSSウィジェットをターゲットにします。
  • 次に、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' );    
}

さらにテストをしてあなたのニーズに適応できることを願っています!

3
birgire

デフォルトRSSウィジェット の本体は、関数 wp_widget_rss_output によって生成されます。ソースからわかるように、[...]はコードに組み込まれて直接エコーされます。フィード出力を簡単に操作するためのフィルタはありません。

2
cjbj