web-dev-qa-db-ja.com

コメントがまだない場合は、デフォルトの[最近のコメント]ウィジェットを非表示にします。

まだコメントがない場合、ウィジェットを完全に隠す方法はありますか?

私はfunctions.phpファイルにphp関数を追加することを考えていました - それは可能な方法ですか?もしそうなら、誰かが提案を提供できますか?

1
okiedokey

コメントウィジェット用のフックがあるかどうかはわかりませんが、コメントがあるかどうかを確認するための条件付きでテンプレート内のウィジェットを呼び出すことができます。 functions.phpでもこれを行うことができるでしょう。

何かのようなもの:

$num_comments = get_comments_number();

if ( $num_comments > 0 ) {  
    the_widget( 'WP_Widget_Recent_Comments' );
} else { 
 // do something else
}
1
Wyck

これは、 wp_get_sidebars_widgets()関数の_(dynamic_sidebar()関数内の と呼ばれる)からの sidebars_widgets フィルターを使用するという考えです。

/** 
 * Remove the recent comments widgets from a given sidebar (index)
 * 
 * @link http://wordpress.stackexchange.com/q/151361/26350
 */
! is_admin() && add_filter( 'sidebars_widgets', function( $sidebars_widgets ) {

    // ------------------------
    // Edit this to your needs:
    $sidebar_index = 'sidebar-1';
    $find          = 'recent-comments';
    // ------------------------

    if( isset( $sidebars_widgets[$sidebar_index] ) && 0 == get_comments_number() )
    {
        foreach( $sidebars_widgets[$sidebar_index] as $key => $widget )
        {
            if( false !== stripos( $widget, $find ) )
                 unset( $sidebars_widgets[$sidebar_index][$key] );

        }
    }
    return $sidebars_widgets;
}, PHP_INT_MAX );

$sidebar_index$findを必要に応じて変更することを忘れないでください。

単一のサイドバーをターゲットにする代わりに、すべてのサイドバーをループすることもできます。必要に応じてコードスニペットを調整できると確信しています。

1
birgire