%s', checked( $value, 1, false ), esc_html__( 'Filter out ads, press releases, and promotional content during fetch', 'peptide-news' ) ); } public static function render_filter_sensitivity_field(): void { $value = get_option( 'peptide_news_filter_sensitivity', 'moderate' ); $options = array( 'strict' => __( 'Strict — block aggressively (may catch some legitimate articles)', 'peptide-news' ), 'moderate' => __( 'Moderate — balanced filtering (recommended)', 'peptide-news' ), 'lenient' => __( 'Lenient — only block obvious promotional content', 'peptide-news' ), ); echo ''; } public static function render_filter_llm_enabled_field(): void { $value = get_option( 'peptide_news_filter_llm_enabled', 0 ); printf( '', checked( $value, 1, false ), esc_html__( 'Use LLM to classify borderline articles (requires AI Analysis to be enabled)', 'peptide-news' ) ); } public static function render_filter_llm_model_field(): void { $value = get_option( 'peptide_news_filter_llm_model', '' ); printf( '', esc_attr( $value ) ); echo '

' . esc_html__( 'OpenRouter model for content classification. Leave blank to use the Keywords Model above.', 'peptide-news' ) . '

'; } public static function render_filter_title_keywords_field(): void { $value = get_option( 'peptide_news_filter_title_keywords', '' ); $placeholder = class_exists( 'Peptide_News_Content_Filter' ) ? Peptide_News_Content_Filter::get_default_title_keywords_text() : ''; printf( '', esc_attr( $placeholder ), esc_textarea( $value ) ); echo '

' . esc_html__( 'One keyword/phrase per line. Articles with these in the title are blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; } public static function render_filter_body_keywords_field(): void { $value = get_option( 'peptide_news_filter_body_keywords', '' ); $placeholder = class_exists( 'Peptide_News_Content_Filter' ) ? Peptide_News_Content_Filter::get_default_body_keywords_text() : ''; printf( '', esc_attr( $placeholder ), esc_textarea( $value ) ); echo '

' . esc_html__( 'One keyword/phrase per line. Multiple matches in article body trigger filtering (threshold depends on sensitivity). Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; } public static function render_filter_blocked_domains_field(): void { $value = get_option( 'peptide_news_filter_blocked_domains', '' ); $placeholder = class_exists( 'Peptide_News_Content_Filter' ) ? Peptide_News_Content_Filter::get_default_blocked_domains_text() : ''; printf( '', esc_attr( $placeholder ), esc_textarea( $value ) ); echo '

' . esc_html__( 'One domain per line. Articles from these sources are always blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '

'; } }