| 开发者 | onetwothreesend |
|---|---|
| 更新时间 | 2026年5月30日 00:29 |
| PHP版本: | 8.1 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[otts_form id="1"], Gutenberg block, or PHP onetwothreesend_render_form(1).{first_name}, {email}, {site_name}, {from_name} placeholders.api.anthropic.com) — for drafting and editing newsletters. You provide the API key in Settings → AI. Terms: https://www.anthropic.com/legal/consumer-terms. Privacy: https://www.anthropic.com/legal/privacy.api.resend.com) — optional, for email delivery. You provide the API key in Settings → Email Provider if you choose Resend. Terms: https://resend.com/legal/terms-of-service. Privacy: https://resend.com/legal/privacy-policy.No — the plugin works fine without one if you write newsletters yourself. The AI features (Generate, Rewrite, Shorten, Expand, Fix grammar, subject-line suggestions, tone check) are all optional and only run when you click them. Without a key, you can still write a newsletter directly in the editor, run the pre-send audit, schedule it, and send to your subscribers. If you want the AI features, get a key at console.anthropic.com — free to sign up, pay-per-token usage — and paste it into Newsletter → Settings → AI.
Out of the box, no — the free plugin supports Resend and SMTP. The companion pro plugin adds Mailchimp, MailerLite, Brevo, and ConvertKit. Developers can also add providers by hooking the otts_make_provider filter.
No. Subscribers live in your own WordPress database (wp_otts_subscribers). Unsubscribe is one-click via a token in the email footer — no login required.
By default, your subscriber list, newsletter drafts, and settings are preserved. If you tick "Delete data on uninstall" in Settings → Advanced before deleting, the plugin drops its tables and removes all options.
Yes. The signup form uses a honeypot for spam protection instead of a nonce, so it is cache-safe.
pending_confirm; the welcome email + signup notifier + external-provider sync only fire on activation. Customisable subject, body, post-click landing copy, and link-expiry days (default 7). Off by default.otts_turnstile_fail_open) so a CF outage does not kill all signups. Off by default.confirmation_sent_at column on wp_otts_subscribers. dbDelta migration runs automatically on plugin upgrade./wp-json/otts/v1/subscribe endpoint. Bots use newsletter signup forms across thousands of sites to flood a victim's inbox with confirmation emails, burying real alerts (fraud notifications, password resets) — your site is the unwitting relay, not the target. The endpoint now applies three additional layers on top of the existing honeypot: (1) per-IP rate limit, default 10 submissions per IP per hour, filterable via otts_subscribe_rate_limit_per_hour; (2) MX-record check on the email's domain — typos and bogus domains are rejected; (3) disposable / temp-email domain blocklist (mailinator, guerrillamail, yopmail and ~25 common throwaways), filterable via otts_subscribe_disposable_domains. Each layer silently accept-and-drops (HTTP 200 OK) so bots can't fingerprint which check rejected them.DELETE /wp-json/otts/v1/subscriber/{id} and POST /wp-json/otts/v1/subscriber/delete-by-email. Useful for clearing bot signups that slip past the new defences.publer to the affiliate-hint helper's service map. When the new One Two Three Post 1.7.0 surfaces its Publer-transport setup field, the helper renders a contextual "Don't have a Publer account yet? Sign up →" link pointing at /tools/#publer on onetwothreesend.com — same compliance posture as the existing Claude / MailerLite / Brevo / Postmark / BigScoots / Beehiiv hints. No external HTTP from this plugin; the affiliate redirection lives on the destination docs page.wp_mail() — so deliverability matches the rest of your traffic. Stripe paid signups + free→paid upgrades both notify the paid list. Includes a "Send test notification" button on the Notifications tab so you can verify wiring before a real signup happens. Subject line is [Site name] New {free|paid} signup — email@example.com, body includes source attribution from 2.0.17.signup_meta JSON column on wp_otts_subscribers records the first-touch referrer host, landing-page URL, and any utm_* query parameters set on the visitor's first front-end pageview. The Subscribers admin table gains a Source column; both the free CSV export and the Pro export/import flow include source + signup_meta_json columns. Cookie name is otts_ft, SameSite=Lax, 1-year TTL; no PII stored, no external HTTP. Sites with a consent gate can hold the cookie until consent is granted via the otts_signup_attribution_consent filter. First-touch wins — re-subscribing an existing email doesn't overwrite the original attribution. Stripe and Beehiiv signups are tagged with utm_source=stripe / utm_source=beehiiv so the same column reflects the channel of paid + imported subscribers, not just web signups.onetwothreesend.com/tools/, not raw affiliate URLs; filterable via otts_affiliate_hint_enabled to disable globally.OTTS_Affiliate_Hint helper that renders an inline "Don't have a {service} account yet? Sign up →" link next to setup fields when the field is empty. First two call sites: the Claude API key field on Newsletter → Settings → AI Settings, and the Email provider selector on Newsletter → Settings → Provider. Operators who already have credentials never see the hints — the helper only renders when the relevant field is blank. Every link points to onetwothreesend.com/tools/ (a docs page on the publisher's site, not a raw affiliate URL); affiliate redirection happens there and the FTC disclosure lives on that page. Operators can disable all hints globally via the otts_affiliate_hint_enabled filter (returns false), or replace the service map via otts_affiliate_hint_services. wp.org review note: no external HTTP, no tracking, no site-identifying data — static helper, fully filterable.otts_settings_schedule_show_default hides the legacy schedule form when an extension takes over, action otts_settings_schedule_render_pre lets an extension inject a replacement notice, and filter otts_scheduler_register_default_cron suppresses the default otts_scheduled_send cron registration when an extension provides its own. Free plugin behaviour is unchanged without those hooks.wp_otts_send_retries table holds transient failures; a 5-minute cron worker re-fires them with exponential backoff (5m → 15m → 45m → 2h → 6h) up to 5 attempts. Subscribers get new bounce_state, soft_bounces, last_bounce_at, and last_delivery_at columns. The Resend provider now returns structured WP_Error values with a category so the classifier can act on them without re-parsing the response. A new "Send Health" admin page (Newsletter → Send Health) shows pending retries, bounced subscribers, recently resolved retries, and recent send results — and an admin notice fires whenever a send finishes with any non-success rows.Retry-After honoured (or 250ms default) before giving up.{email} in the URL is replaced with the URL-encoded email so a follow-up page (e.g. a Stripe-checkout pricing page) can pre-fill the address. Leave blank to keep the existing inline-message behaviour.otts_send_recipients so pro-plugin Stripe paywall can segment free vs paid subscribers per newsletter.otts_render_for_subscriber so pro-plugin paywall can substitute a teaser + Subscribe CTA when a free subscriber receives a paid-newsletter send.otts_settings_tabs filter, otts_render_settings_tab_{tab} and otts_save_settings_{tab} actions, so companion plugins can add their own tabs without modifying free-plugin files.%1$s, %2$s) in strings with multiple values.wp_handle_upload, wp_delete_file).$_POST / $_GET sanitization pipeline (wp_unslash → sanitize_*).$wpdb->prepare() end-to-end.load_plugin_textdomain() call; WP 4.6+ auto-loads translations.otts_form_types, otts_provider_choices, otts_make_provider, otts_editor_action, otts_audit_checks.{from_name} placeholder for email templates.