' . 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' ) . '
'; } }