refactor(admin): extract filter field renderers (325 → 249 + 103 lines)

Move 7 content-filter settings field renderers into dedicated
Peptide_News_Admin_Filter_Field_Renderers class. Main field
renderers file drops from 325 to 249 lines with backward-
compatible one-liner proxies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
peptiderepo
2026-04-16 22:43:50 +07:00
parent 159a36eeb7
commit 04b90e2e2d
3 changed files with 112 additions and 84 deletions

View File

@@ -144,91 +144,15 @@ class Peptide_News_Admin_Field_Renderers {
);
}
public static function render_filter_enabled_field(): void {
$value = get_option( 'peptide_news_filter_enabled', 1 );
printf(
'<label><input type="checkbox" name="peptide_news_filter_enabled" value="1" %s /> %s</label>',
checked( $value, 1, false ),
esc_html__( 'Filter out ads, press releases, and promotional content during fetch', 'peptide-news' )
);
}
// ── Filter field proxies — @see Peptide_News_Admin_Filter_Field_Renderers ──
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 '<select name="peptide_news_filter_sensitivity" id="peptide_news_filter_sensitivity">';
foreach ( $options as $key => $label ) {
printf(
'<option value="%s"%s>%s</option>',
esc_attr( $key ),
selected( $value, $key, false ),
esc_html( $label )
);
}
echo '</select>';
}
public static function render_filter_llm_enabled_field(): void {
$value = get_option( 'peptide_news_filter_llm_enabled', 0 );
printf(
'<label><input type="checkbox" name="peptide_news_filter_llm_enabled" value="1" %s /> %s</label>',
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(
'<input type="text" name="peptide_news_filter_llm_model" value="%s" class="regular-text" />',
esc_attr( $value )
);
echo '<p class="description">' . esc_html__( 'OpenRouter model for content classification. Leave blank to use the Keywords Model above.', 'peptide-news' ) . '</p>';
}
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(
'<textarea name="peptide_news_filter_title_keywords" rows="8" class="large-text code" placeholder="%s">%s</textarea>',
esc_attr( $placeholder ),
esc_textarea( $value )
);
echo '<p class="description">' . esc_html__( 'One keyword/phrase per line. Articles with these in the title are blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '</p>';
}
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(
'<textarea name="peptide_news_filter_body_keywords" rows="8" class="large-text code" placeholder="%s">%s</textarea>',
esc_attr( $placeholder ),
esc_textarea( $value )
);
echo '<p class="description">' . 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' ) . '</p>';
}
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(
'<textarea name="peptide_news_filter_blocked_domains" rows="6" class="large-text code" placeholder="%s">%s</textarea>',
esc_attr( $placeholder ),
esc_textarea( $value )
);
echo '<p class="description">' . esc_html__( 'One domain per line. Articles from these sources are always blocked. Leave empty to use built-in defaults.', 'peptide-news' ) . '</p>';
}
public static function render_filter_enabled_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_enabled_field(); }
public static function render_filter_sensitivity_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_sensitivity_field(); }
public static function render_filter_llm_enabled_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_llm_enabled_field(); }
public static function render_filter_llm_model_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_llm_model_field(); }
public static function render_filter_title_keywords_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_title_keywords_field(); }
public static function render_filter_body_keywords_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_body_keywords_field(); }
public static function render_filter_blocked_domains_field(): void { Peptide_News_Admin_Filter_Field_Renderers::render_filter_blocked_domains_field(); }
public static function render_llm_enabled_field(): void {
$value = get_option( 'peptide_news_llm_enabled', 0 );