Dover, NJ – In a surprise political shift, Dover Mayor James P. Dodd, a Democrat, has formally endorsed Republican Jack Ciattarelli for governor — a move that delivers a symbolic blow to Rep. Mikie Sherrill in her own congressional district.
Dodd, who leads the Morris County town carried by Vice President Kamala Harris by 14 points in 2020, joined a small circle of Democratic local leaders willing to publicly back Ciattarelli. The endorsement underscores Ciattarelli’s efforts to court bipartisan support in a state where Democrats hold a voter registration advantage.
/**
* SNN Article Link Cleanup & Display Stability
* Disable BOTH "Link Cleaner" and "WP Perf" before activating.
* Paste into Code Snippets as PHP; run everywhere.
*
* Standard RSS feeds, REST output, schema and article identifiers
* are not rewritten. Requires WordPress 6.2+ for link cleanup.
*/
if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) {
final class SNN_Safe_Display_20261031 {
public static function boot() {
add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 );
add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 );
add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 );
}
public static function head_cleanup() {
if ( is_admin() ) {
return;
}
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
}
public static function skip_request() {
return is_admin()
|| is_feed()
|| is_trackback()
|| ( defined( 'REST_REQUEST' ) && REST_REQUEST )
|| wp_doing_ajax()
|| is_preview();
}
/**
* Remove UTM parameters while preserving other query parameters,
* their order, encoding and the URL fragment.
*/
public static function clean_url( $url ) {
if ( ! is_string( $url ) || $url === '' ) {
return $url;
}
// Preserve non-web schemes such as mailto:, tel: and data:.
if (
preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url )
&& ! preg_match( '~^https?://~i', $url )
) {
return $url;
}
$parts = explode( '#', $url, 2 );
$base = explode( '?', $parts[0], 2 );
if ( count( $base ) !== 2 ) {
return $url;
}
$pairs = explode( '&', $base[1] );
// Preserve commonly signed URLs.
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = strtolower( urldecode( $parameter[0] ) );
if (
in_array(
$key,
array(
'signature',
'sig',
'x-amz-signature',
'x-goog-signature',
),
true
)
) {
return $url;
}
}
$kept = array();
$changed = false;
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = urldecode( $parameter[0] );
if ( stripos( $key, 'utm_' ) === 0 ) {
$changed = true;
continue;
}
$kept[] = $pair;
}
if ( ! $changed ) {
return $url;
}
$query = implode( '&', $kept );
return $base[0]
. ( $query !== '' ? '?' . $query : '' )
. ( isset( $parts[1] ) ? '#' . $parts[1] : '' );
}
/**
* Clean anchor URLs in displayed single-post content only.
* Do not buffer or rewrite the full page or feed response.
*/
public static function article_links( $html ) {
if (
! is_string( $html )
|| self::skip_request()
|| ! is_singular( 'post' )
|| ! in_the_loop()
|| ! is_main_query()
|| apply_filters( 'snn_safe_display_skip_links', false )
|| ! class_exists( 'WP_HTML_Tag_Processor' )
) {
return $html;
}
$processor = new WP_HTML_Tag_Processor( $html );
while ( $processor->next_tag( 'A' ) ) {
$href = $processor->get_attribute( 'href' );
if ( ! is_string( $href ) ) {
continue;
}
$clean = self::clean_url( $href );
if ( $clean !== $href ) {
$processor->set_attribute( 'href', $clean );
}
}
return $processor->get_updated_html();
}
public static function display_css() {
if ( self::skip_request() || ! is_singular( 'post' ) ) {
return;
}
/*
* Space reservations apply only to ad wrappers with these classes.
* Adjust the heights to match your actual ad placements.
* Unfilled ad slots can retain blank space.
*/
$css = '
.snn-ad-container.snn-ad-inarticle {
min-height: 280px;
}
.snn-ad-container.snn-ad-sidebar {
min-height: 280px;
}
.entry-content p.wp-block-paragraph {
overflow-wrap: break-word;
}
@media (max-width: 921px) {
.snn-ad-container.snn-ad-sidebar {
min-height: 100px;
}
}
';
wp_register_style(
'snn-safe-display',
false,
array(),
'1.0.0'
);
wp_enqueue_style( 'snn-safe-display' );
wp_add_inline_style( 'snn-safe-display', $css );
}
}
SNN_Safe_Display_20261031::boot();
}
Key Points
- Dover Mayor James P. Dodd, a Democrat, endorsed Republican Jack Ciattarelli for governor.
- Dover sits inside Rep. Mikie Sherrill’s district, highlighting local political fallout.
- Dodd has a history of crossing party lines, previously backing Republican Chris Christie.
History of breaking ranks
Dodd’s decision is not unprecedented. In 2013, he and Garfield Deputy Mayor Tana Raymond — another Democrat — endorsed Republican Gov. Chris Christie’s re-election campaign. Raymond had also backed Christie over Democrat Jon Corzine in 2009. Their moves highlighted frustration with statewide Democratic leadership at the time.
Still, Dodd’s endorsement of Ciattarelli is likely to draw sharper attention given its timing and location. Dover’s vote share has leaned reliably Democratic in statewide contests, making the public support of its mayor a political prize for Ciattarelli.
Impact on Sherrill’s backyard
The endorsement lands in Sherrill’s own congressional district, where she is already navigating scrutiny over her Naval Academy past and facing Republican efforts to erode her standing among moderates. Ciattarelli, who nearly defeated Gov. Phil Murphy in 2021, has framed his campaign around attracting crossover Democrats and independents.
/**
* SNN Article Link Cleanup & Display Stability
* Disable BOTH "Link Cleaner" and "WP Perf" before activating.
* Paste into Code Snippets as PHP; run everywhere.
*
* Standard RSS feeds, REST output, schema and article identifiers
* are not rewritten. Requires WordPress 6.2+ for link cleanup.
*/
if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) {
final class SNN_Safe_Display_20261031 {
public static function boot() {
add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 );
add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 );
add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 );
}
public static function head_cleanup() {
if ( is_admin() ) {
return;
}
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
}
public static function skip_request() {
return is_admin()
|| is_feed()
|| is_trackback()
|| ( defined( 'REST_REQUEST' ) && REST_REQUEST )
|| wp_doing_ajax()
|| is_preview();
}
/**
* Remove UTM parameters while preserving other query parameters,
* their order, encoding and the URL fragment.
*/
public static function clean_url( $url ) {
if ( ! is_string( $url ) || $url === '' ) {
return $url;
}
// Preserve non-web schemes such as mailto:, tel: and data:.
if (
preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url )
&& ! preg_match( '~^https?://~i', $url )
) {
return $url;
}
$parts = explode( '#', $url, 2 );
$base = explode( '?', $parts[0], 2 );
if ( count( $base ) !== 2 ) {
return $url;
}
$pairs = explode( '&', $base[1] );
// Preserve commonly signed URLs.
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = strtolower( urldecode( $parameter[0] ) );
if (
in_array(
$key,
array(
'signature',
'sig',
'x-amz-signature',
'x-goog-signature',
),
true
)
) {
return $url;
}
}
$kept = array();
$changed = false;
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = urldecode( $parameter[0] );
if ( stripos( $key, 'utm_' ) === 0 ) {
$changed = true;
continue;
}
$kept[] = $pair;
}
if ( ! $changed ) {
return $url;
}
$query = implode( '&', $kept );
return $base[0]
. ( $query !== '' ? '?' . $query : '' )
. ( isset( $parts[1] ) ? '#' . $parts[1] : '' );
}
/**
* Clean anchor URLs in displayed single-post content only.
* Do not buffer or rewrite the full page or feed response.
*/
public static function article_links( $html ) {
if (
! is_string( $html )
|| self::skip_request()
|| ! is_singular( 'post' )
|| ! in_the_loop()
|| ! is_main_query()
|| apply_filters( 'snn_safe_display_skip_links', false )
|| ! class_exists( 'WP_HTML_Tag_Processor' )
) {
return $html;
}
$processor = new WP_HTML_Tag_Processor( $html );
while ( $processor->next_tag( 'A' ) ) {
$href = $processor->get_attribute( 'href' );
if ( ! is_string( $href ) ) {
continue;
}
$clean = self::clean_url( $href );
if ( $clean !== $href ) {
$processor->set_attribute( 'href', $clean );
}
}
return $processor->get_updated_html();
}
public static function display_css() {
if ( self::skip_request() || ! is_singular( 'post' ) ) {
return;
}
/*
* Space reservations apply only to ad wrappers with these classes.
* Adjust the heights to match your actual ad placements.
* Unfilled ad slots can retain blank space.
*/
$css = '
.snn-ad-container.snn-ad-inarticle {
min-height: 280px;
}
.snn-ad-container.snn-ad-sidebar {
min-height: 280px;
}
.entry-content p.wp-block-paragraph {
overflow-wrap: break-word;
}
@media (max-width: 921px) {
.snn-ad-container.snn-ad-sidebar {
min-height: 100px;
}
}
';
wp_register_style(
'snn-safe-display',
false,
array(),
'1.0.0'
);
wp_enqueue_style( 'snn-safe-display' );
wp_add_inline_style( 'snn-safe-display', $css );
}
}
SNN_Safe_Display_20261031::boot();
}
The move gives him a headline-making win in Morris County — and a reminder that party loyalty in New Jersey politics is far from absolute.
/**
* SNN Article Link Cleanup & Display Stability
* Disable BOTH "Link Cleaner" and "WP Perf" before activating.
* Paste into Code Snippets as PHP; run everywhere.
*
* Standard RSS feeds, REST output, schema and article identifiers
* are not rewritten. Requires WordPress 6.2+ for link cleanup.
*/
if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) {
final class SNN_Safe_Display_20261031 {
public static function boot() {
add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 );
add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 );
add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 );
}
public static function head_cleanup() {
if ( is_admin() ) {
return;
}
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
}
public static function skip_request() {
return is_admin()
|| is_feed()
|| is_trackback()
|| ( defined( 'REST_REQUEST' ) && REST_REQUEST )
|| wp_doing_ajax()
|| is_preview();
}
/**
* Remove UTM parameters while preserving other query parameters,
* their order, encoding and the URL fragment.
*/
public static function clean_url( $url ) {
if ( ! is_string( $url ) || $url === '' ) {
return $url;
}
// Preserve non-web schemes such as mailto:, tel: and data:.
if (
preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url )
&& ! preg_match( '~^https?://~i', $url )
) {
return $url;
}
$parts = explode( '#', $url, 2 );
$base = explode( '?', $parts[0], 2 );
if ( count( $base ) !== 2 ) {
return $url;
}
$pairs = explode( '&', $base[1] );
// Preserve commonly signed URLs.
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = strtolower( urldecode( $parameter[0] ) );
if (
in_array(
$key,
array(
'signature',
'sig',
'x-amz-signature',
'x-goog-signature',
),
true
)
) {
return $url;
}
}
$kept = array();
$changed = false;
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = urldecode( $parameter[0] );
if ( stripos( $key, 'utm_' ) === 0 ) {
$changed = true;
continue;
}
$kept[] = $pair;
}
if ( ! $changed ) {
return $url;
}
$query = implode( '&', $kept );
return $base[0]
. ( $query !== '' ? '?' . $query : '' )
. ( isset( $parts[1] ) ? '#' . $parts[1] : '' );
}
/**
* Clean anchor URLs in displayed single-post content only.
* Do not buffer or rewrite the full page or feed response.
*/
public static function article_links( $html ) {
if (
! is_string( $html )
|| self::skip_request()
|| ! is_singular( 'post' )
|| ! in_the_loop()
|| ! is_main_query()
|| apply_filters( 'snn_safe_display_skip_links', false )
|| ! class_exists( 'WP_HTML_Tag_Processor' )
) {
return $html;
}
$processor = new WP_HTML_Tag_Processor( $html );
while ( $processor->next_tag( 'A' ) ) {
$href = $processor->get_attribute( 'href' );
if ( ! is_string( $href ) ) {
continue;
}
$clean = self::clean_url( $href );
if ( $clean !== $href ) {
$processor->set_attribute( 'href', $clean );
}
}
return $processor->get_updated_html();
}
public static function display_css() {
if ( self::skip_request() || ! is_singular( 'post' ) ) {
return;
}
/*
* Space reservations apply only to ad wrappers with these classes.
* Adjust the heights to match your actual ad placements.
* Unfilled ad slots can retain blank space.
*/
$css = '
.snn-ad-container.snn-ad-inarticle {
min-height: 280px;
}
.snn-ad-container.snn-ad-sidebar {
min-height: 280px;
}
.entry-content p.wp-block-paragraph {
overflow-wrap: break-word;
}
@media (max-width: 921px) {
.snn-ad-container.snn-ad-sidebar {
min-height: 100px;
}
}
';
wp_register_style(
'snn-safe-display',
false,
array(),
'1.0.0'
);
wp_enqueue_style( 'snn-safe-display' );
wp_add_inline_style( 'snn-safe-display', $css );
}
}
SNN_Safe_Display_20261031::boot();
}
/**
* SNN Article Link Cleanup & Display Stability
* Disable BOTH "Link Cleaner" and "WP Perf" before activating.
* Paste into Code Snippets as PHP; run everywhere.
*
* Standard RSS feeds, REST output, schema and article identifiers
* are not rewritten. Requires WordPress 6.2+ for link cleanup.
*/
if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) {
final class SNN_Safe_Display_20261031 {
public static function boot() {
add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 );
add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 );
add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 );
}
public static function head_cleanup() {
if ( is_admin() ) {
return;
}
remove_action( 'wp_head', 'wp_generator' );
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
}
public static function skip_request() {
return is_admin()
|| is_feed()
|| is_trackback()
|| ( defined( 'REST_REQUEST' ) && REST_REQUEST )
|| wp_doing_ajax()
|| is_preview();
}
/**
* Remove UTM parameters while preserving other query parameters,
* their order, encoding and the URL fragment.
*/
public static function clean_url( $url ) {
if ( ! is_string( $url ) || $url === '' ) {
return $url;
}
// Preserve non-web schemes such as mailto:, tel: and data:.
if (
preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url )
&& ! preg_match( '~^https?://~i', $url )
) {
return $url;
}
$parts = explode( '#', $url, 2 );
$base = explode( '?', $parts[0], 2 );
if ( count( $base ) !== 2 ) {
return $url;
}
$pairs = explode( '&', $base[1] );
// Preserve commonly signed URLs.
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = strtolower( urldecode( $parameter[0] ) );
if (
in_array(
$key,
array(
'signature',
'sig',
'x-amz-signature',
'x-goog-signature',
),
true
)
) {
return $url;
}
}
$kept = array();
$changed = false;
foreach ( $pairs as $pair ) {
$parameter = explode( '=', $pair, 2 );
$key = urldecode( $parameter[0] );
if ( stripos( $key, 'utm_' ) === 0 ) {
$changed = true;
continue;
}
$kept[] = $pair;
}
if ( ! $changed ) {
return $url;
}
$query = implode( '&', $kept );
return $base[0]
. ( $query !== '' ? '?' . $query : '' )
. ( isset( $parts[1] ) ? '#' . $parts[1] : '' );
}
/**
* Clean anchor URLs in displayed single-post content only.
* Do not buffer or rewrite the full page or feed response.
*/
public static function article_links( $html ) {
if (
! is_string( $html )
|| self::skip_request()
|| ! is_singular( 'post' )
|| ! in_the_loop()
|| ! is_main_query()
|| apply_filters( 'snn_safe_display_skip_links', false )
|| ! class_exists( 'WP_HTML_Tag_Processor' )
) {
return $html;
}
$processor = new WP_HTML_Tag_Processor( $html );
while ( $processor->next_tag( 'A' ) ) {
$href = $processor->get_attribute( 'href' );
if ( ! is_string( $href ) ) {
continue;
}
$clean = self::clean_url( $href );
if ( $clean !== $href ) {
$processor->set_attribute( 'href', $clean );
}
}
return $processor->get_updated_html();
}
public static function display_css() {
if ( self::skip_request() || ! is_singular( 'post' ) ) {
return;
}
/*
* Space reservations apply only to ad wrappers with these classes.
* Adjust the heights to match your actual ad placements.
* Unfilled ad slots can retain blank space.
*/
$css = '
.snn-ad-container.snn-ad-inarticle {
min-height: 280px;
}
.snn-ad-container.snn-ad-sidebar {
min-height: 280px;
}
.entry-content p.wp-block-paragraph {
overflow-wrap: break-word;
}
@media (max-width: 921px) {
.snn-ad-container.snn-ad-sidebar {
min-height: 100px;
}
}
';
wp_register_style(
'snn-safe-display',
false,
array(),
'1.0.0'
);
wp_enqueue_style( 'snn-safe-display' );
wp_add_inline_style( 'snn-safe-display', $css );
}
}
SNN_Safe_Display_20261031::boot();
}