{"id":5706,"date":"2009-05-28T04:50:39","date_gmt":"2009-05-28T04:50:39","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/wpuntexturize\/"},"modified":"2025-04-08T22:17:36","modified_gmt":"2025-04-08T22:17:36","slug":"wpuntexturize","status":"publish","type":"plugin","link":"https:\/\/am.wordpress.org\/plugins\/wpuntexturize\/","author":3606,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.3","stable_tag":"2.3","tested":"6.8.5","requires":"5.5","requires_php":"","requires_plugins":null,"header_name":"wpuntexturize","header_author":"Scott Reilly","header_description":"","assets_banners_color":"ffca94","last_updated":"2025-04-08 22:17:36","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/cgi-bin\/webscr?cmd=_s-xclick&hosted_button_id=6ARCFJ9TX3522","header_plugin_uri":"https:\/\/coffee2code.com\/wp-plugins\/wpuntexturize\/","header_author_uri":"https:\/\/coffee2code.com\/","rating":4.6,"author_block_rating":0,"active_installs":900,"downloads":25675,"num_ratings":12,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"coffee2code","date":"2009-06-11 20:02:59"},"1.0.1":{"tag":"1.0.1","author":"coffee2code","date":"2010-01-02 07:31:47"},"1.1":{"tag":"1.1","author":"coffee2code","date":"2010-01-05 17:26:41"},"1.2":{"tag":"1.2","author":"coffee2code","date":"2010-07-15 04:53:47"},"1.3":{"tag":"1.3","author":"coffee2code","date":"2010-08-17 03:26:03"},"1.3.1":{"tag":"1.3.1","author":"coffee2code","date":"2010-08-18 04:36:00"},"1.3.2":{"tag":"1.3.2","author":"coffee2code","date":"2011-02-12 20:08:38"},"1.4":{"tag":"1.4","author":"coffee2code","date":"2011-02-24 19:51:37"},"1.4.1":{"tag":"1.4.1","author":"coffee2code","date":"2011-06-21 05:51:48"},"1.4.2":{"tag":"1.4.2","author":"coffee2code","date":"2011-12-22 04:22:28"},"1.4.3":{"tag":"1.4.3","author":"coffee2code","date":"2012-06-04 05:07:28"},"1.4.4":{"tag":"1.4.4","author":"coffee2code","date":"2012-12-07 07:25:06"},"1.5":{"tag":"1.5","author":"coffee2code","date":"2013-12-13 08:28:10"},"1.5.1":{"tag":"1.5.1","author":"coffee2code","date":"2014-08-26 04:46:43"},"1.5.2":{"tag":"1.5.2","author":"coffee2code","date":"2015-02-11 17:08:30"},"1.5.3":{"tag":"1.5.3","author":"coffee2code","date":"2015-08-02 05:56:10"},"1.5.4":{"tag":"1.5.4","author":"coffee2code","date":"2016-04-13 22:42:35"},"1.6.1":{"tag":"1.6.1","author":"coffee2code","date":"2017-01-20 07:21:18"},"1.6.2":{"tag":"1.6.2","author":"coffee2code","date":"2018-02-15 07:05:56"},"1.6.3":{"tag":"1.6.3","author":"coffee2code","date":"2019-03-04 08:34:11"},"1.7":{"tag":"1.7","author":"coffee2code","date":"2019-06-11 04:59:42"},"1.7.1":{"tag":"1.7.1","author":"coffee2code","date":"2019-11-23 07:12:20"},"2.0":{"tag":"2.0","author":"coffee2code","date":"2020-05-16 06:37:01"},"2.1":{"tag":"2.1","author":"coffee2code","date":"2020-08-24 07:10:15"},"2.2":{"tag":"2.2","author":"coffee2code","date":"2021-07-15 06:00:18"},"2.2.1":{"tag":"2.2.1","author":"coffee2code","date":"2023-08-15 23:05:06"},"2.2.2":{"tag":"2.2.2","author":"coffee2code","date":"2024-08-08 18:12:11"},"2.3":{"tag":"2.3","author":"coffee2code","date":"2025-04-08 22:17:36"}},"upgrade_notice":{"2.3":"<p>Recommended minor update: dropped support for versions of WP older than 5.5, prevented translations from containing unintended markup, noted compatibility through WP 6.8+ and PHP 8.3+, and updated copyright date (2025)<\/p>","2.2.2":"<p>Trivial update: noted compatibility through WP 6.6+, removed unit tests from release packaging, and updated copyright date (2024)<\/p>","2.2.1":"<p>Trivial update: noted compatibility through WP 6.3+, updated unit tests to run against latest WordPress, and updated copyright date (2023)<\/p>","2.2":"<p>Minor update: refactored some code, extracted developer docs out from readme and into new DEVELOPER-DOCS.md, restructured unit test files, noted compatibility through WP 5.7, and updated copyright date (2021).<\/p>","2.1":"<p>Recommended update: Mirrored and handled some WP 5.5 terminology changes for inclusion, restructured the unit test file structure, added a TODO.md file, and noted compatibility through WP 5.5+.<\/p>","2.0":"<p>Recommended update: No longer convert native curly quotes to non-curly quotes by default, but added a setting to optionally do so; reorganized much of the plugin&#039;s code; removed long-deprecated <code>wpuntexturize()<\/code>, updated some URLs to HTTPS; and noted compatibility through WP 5.4+.<\/p>","1.7.1":"<p>Trivial update: noted compatibility through WP 5.3+ and updated copyright date (2020)<\/p>","1.7":"<p>Recommended update: now convert native curly quotes to non-curly quotes, remove curly quotes from more places, noted compatibility through WP 5.2+, added CHANGELOG.md, tweaked unit test initialization<\/p>","1.6.3":"<p>Trivial update: aded inline documentation for hooks, noted compatibility through WP 5.1+, updated copyright date (2019)<\/p>","1.6.2":"<p>Trivial update: noted compatibility through WP 4.9+; added README.md; added GitHub link to readme; updated copyright date (2018)<\/p>","1.6.1":"<p>Trivial update: updated unit test bootstrap file, noted compatibility through WP 4.7+, and updated copyright date<\/p>","1.6":"<p>Minor update: convert single and double low 9 quotation marks; noted compatibility through WP 4.6+<\/p>","1.5.4":"<p>Trivial update: minor unit test tweaks, noted compatibility through WP 4.4+, and updated copyright date<\/p>","1.5.3":"<p>Trivial update: bugfix for very rare usage technique; noted compatibility through WP 4.3+<\/p>","1.5.2":"<p>Trivial update: noted compatibility through WP 4.1+ and updated copyright date<\/p>","1.5.1":"<p>Trivial update: noted compatibility through WP 4.0+; added plugin icon.<\/p>","1.5":"<p>Minor update: added unit tests; added helper function; noted compatibility through WP 3.8+ and updated copyright date<\/p>","1.4.4":"<p>Trivial update: noted compatibility through WP 3.5+ and updated copyright date<\/p>","1.4.3":"<p>Trivial update: noted compatibility through WP 3.4+; explicitly stated license<\/p>","1.4.2":"<p>Trivial update: noted compatibility through WP 3.3+<\/p>","1.4.1":"<p>Trivial update: noted compatibility through WP 3.2+ and fixed link in description in readme.txt<\/p>","1.4":"<p>Minor update: deprecated &#039;wpuntexturize()&#039; in favor of &#039;c2c_wpuntexturize()&#039;; renamed action from &#039;wpuntexturize&#039; to &#039;c2c_wpuntexturize&#039;; added link to plugin homepage in readme.txt<\/p>","1.3.2":"<p>Trivial update: noted compatibility through WP 3.1+ and updated copyright date<\/p>","1.3.1":"<p>Bugfix release. Fixed bugs preventing plugin activation.<\/p>","1.3":"<p>Minor update: renamed a filter; added a filter; wrapped initialization into a function.<\/p>","1.2":"<p>Highlights: now applies to all places in WordPress where quotes are made curly; can now programmatically control what filters are affected; verified WP 3.0 compatibility.<\/p>"},"ratings":{"1":1,"2":0,"3":0,"4":1,"5":10},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":972885,"resolution":"128x128","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":552726,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.0.1","1.1","1.2","1.3","1.3.1","1.3.2","1.4","1.4.1","1.4.2","1.4.3","1.4.4","1.5","1.5.1","1.5.2","1.5.3","1.5.4","1.6.1","1.6.2","1.6.3","1.7","1.7.1","2.0","2.1","2.2","2.2.1","2.2.2","2.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":2306037,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"A screenshot of the plugin's checkbox on the Settings -&gt; Reading admin page. If checked, the plugin will convert existing curly quotation marks into their non-curly alternatives."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1975,86,354,72627,27156],"plugin_category":[46],"plugin_contributors":[78189],"plugin_business_model":[],"class_list":["post-5706","plugin","type-plugin","status-publish","hentry","plugin_tags-formatting","plugin_tags-post","plugin_tags-quotes","plugin_tags-substitutions","plugin_tags-wptexturize","plugin_category-editor-and-writing","plugin_contributors-coffee2code","plugin_committers-coffee2code"],"banners":{"banner":"https:\/\/ps.w.org\/wpuntexturize\/assets\/banner-772x250.png?rev=552726","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wpuntexturize\/assets\/icon-128x128.png?rev=972885","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wpuntexturize\/assets\/screenshot-1.png?rev=2306037","caption":"A screenshot of the plugin's checkbox on the Settings -&gt; Reading admin page. If checked, the plugin will convert existing curly quotation marks into their non-curly alternatives."}],"raw_content":"<!--section=description-->\n<p>By default, WordPress converts single and double quotation marks into their curly alternatives. This plugin prevents that from happening, so you can enjoy your quotation marks in their non-curly glory. If your content happens to already have curly quotation marks in it, then this plugin can optionally also convert them to their non-curly alternatives.<\/p>\n\n<p><em>Note:<\/em> Despite the unfortunately misleading name, this plugin is NOT the antithesis of WordPress's <code>wptexturize()<\/code> function. This ONLY prevents WordPress from making HTML entity code substitutions of single and double quotation marks with their curly alternatives and does NOT prevent <code>wptexturize()<\/code> from making any other character and string substitutions. See the FAQ for details on the filters processed by the plugin.<\/p>\n\n<p>Links: <a href=\"https:\/\/coffee2code.com\/wp-plugins\/wpuntexturize\/\">Plugin Homepage<\/a> | <a href=\"https:\/\/wordpress.org\/plugins\/wpuntexturize\/\">Plugin Directory Page<\/a> | <a href=\"https:\/\/github.com\/coffee2code\/wpuntexturize\/\">GitHub<\/a> | <a href=\"https:\/\/coffee2code.com\">Author Homepage<\/a><\/p>\n\n<h3>Developer Documentation<\/h3>\n\n<p>Developer documentation can be found in <a href=\"https:\/\/github.com\/coffee2code\/wpuntexturize\/blob\/master\/DEVELOPER-DOCS.md\">DEVELOPER-DOCS.md<\/a>. That documentation covers the numerous hooks provided by the plugin. Those hooks are listed below to provide an overview of what's available.<\/p>\n\n<ul>\n<li><code>c2c_wpuntexturize<\/code> : An alternative approach to safely invoke <code>c2c_wpuntexturize()<\/code> in such a way that if the plugin were deactivated or deleted, then your calls to the function won't cause errors in your site. This only applies if you use the function directly, which is not typical usage for most users.<\/li>\n<li><code>wpuntexturize_filters<\/code> : customize what filters to hook to be filtered with wpuntexturize. See the Description section for a complete list of all filters that are filtered by default.<\/li>\n<li><code>c2c_wpuntexturize_replacements<\/code> : Customize the character replacements handled by the plugin.<\/li>\n<li><code>c2c_wpuntexturize_convert_curly_quotes<\/code> : Enable conversion of preexisting curly quotes into their non-curly alternatives.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install via the built-in WordPress plugin installer. Or download and unzip <code>wpuntexturize.zip<\/code> inside the plugins directory for your site (typically <code>wp-content\/plugins\/<\/code>)<\/li>\n<li>Activate the plugin through the 'Plugins' admin menu in WordPress<\/li>\n<li>Optional: If you want to also convert existing curly quotation marks within posts to their non-curly alternatives, then on the Settings -&gt; Reading admin page check the checkbox labeled \"Convert existing curly quotes in posts to their non-curly alternatives\". <em>(Reminder that the plugin will always prevent WordPress from converting non-curly quotation marks to the curly alternatives.)<\/em><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='why%20are%20certain%20characters%20in%20my%20posts%20still%20being%20replaced%20by%20their%20html%20entity%20encoded%20version%3F'><h3>Why are certain characters in my posts still being replaced by their HTML entity encoded version?<\/h3><\/dt>\n<dd><p>This ONLY prevents WordPress from making HTML entity code substitutions of single and double quotation marks with their curly alternatives and does NOT prevent WordPress from making any other character and string substitutions.<\/p><\/dd>\n<dt id='why%20do%20i%20still%20see%20curly%20quotation%20marks%20in%20my%20posts%3F'><h3>Why do I still see curly quotation marks in my posts?<\/h3><\/dt>\n<dd><p>Most likely these curly quotes are actually present in your originally post content and are being directly shown to visitors. WordPress isn't converting these to curly quotes since they are already that way. This could happen if you copy-and-pasted text from another source.<\/p>\n\n<p>If you don't want any curly quotes to appear in your posts at all, then on the Settings -&gt; Reading admin page check the checkbox labeled \"Prevent all curly quotes?\". (Or if you're a developer, look into use of the <code>c2c_wpuntexturize_convert_curly_quotes<\/code> filter.)<\/p><\/dd>\n<dt id='what%20text%20does%20this%20plugin%20modify%2Ffilter%3F'><h3>What text does this plugin modify\/filter?<\/h3><\/dt>\n<dd><p>This plugin potentially modifies the post content, excerpt, title, comment text, widget text, and more.<\/p>\n\n<p>More specifically, it performs a wpuntexturize on every filter that WordPress applies the wptexturize to by default. This list comprises:<\/p>\n\n<p>comment_author, term_name, link_name, link_description, link_notes, bloginfo, wp_title, widget_title, single_post_title, single_cat_title, single_tag_title, single_month_title, nav_menu_attr_title, nav_menu_description, term_description, get_the_post_type_description, the_post_thumbnail_caption, the_title, the_content, the_excerpt, the_excerpt_embed, comment_text, list_cats, widget_text, widget_text_content<\/p>\n\n<p>This complete list can be filtered via wpuntexturize's own filter, <code>wpuntexturize_filters<\/code>.<\/p><\/dd>\n<dt id='does%20this%20plugin%20include%20unit%20tests%3F'><h3>Does this plugin include unit tests?<\/h3><\/dt>\n<dd><p>Yes. The tests are not packaged in the release .zip file or included in plugins.svn.wordpress.org, but can be found in the <a href=\"https:\/\/github.com\/coffee2code\/wpuntexturize\/\">plugin's GitHub repository<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.3 (2025-04-07)<\/h4>\n\n<p>Highlights:<\/p>\n\n<p>This recommended release drops support for versions of WP older than 5.5, prevents translations from including unintended markup, verifies compatibility through WP 6.8+ and PHP 8.3+, and a few more minor changes.<\/p>\n\n<p>Details:<\/p>\n\n<ul>\n<li>Change: Remove code supporting versions of WP older than 5.5<\/li>\n<li>Change: Escape output of all translated strings<\/li>\n<li>Change: Discontinue explicit and unnecessary loading of textdomain<\/li>\n<li>Change: Remove <code>is_wp_55_or_later()<\/code><\/li>\n<li>Change: Sanitize the plugin's setting value<\/li>\n<li>New: Add <code>sanitize_boolean()<\/code><\/li>\n<li>Change: Note compatibility through WP 6.8+<\/li>\n<li>Change: Drop compatiblity with versions of WP older than 5.5<\/li>\n<li>Change: Confirm compatiblity through PHP 8.3+<\/li>\n<li>Change: Shorten plugin description in plugin header and readme.txt<\/li>\n<li>Fix: Fix typo in 'Author URI' plugin header value<\/li>\n<li>Change: Update copyright date (2025)<\/li>\n<li>Unit tests:\n\n<ul>\n<li>Change: Explicitly define return type for overridden method<\/li>\n<li>Change: Delete tests for removed back-compatibility<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>2.2.2 (2024-08-08)<\/h4>\n\n<ul>\n<li>Change: Note compatibility through WP 6.6+<\/li>\n<li>Change: Update copyright date (2024)<\/li>\n<li>Change: Reduce number of 'Tags' in readme.txt<\/li>\n<li>Change: Remove development and testing related files from release packaging<\/li>\n<li>Unit tests:\n\n<ul>\n<li>Hardening: Prevent direct web access to <code>bootstrap.php<\/code><\/li>\n<li>Change: In bootstrap, store path to plugin file constant<\/li>\n<li>Change: In bootstrap, add backcompat for PHPUnit pre-v6.0<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>2.2.1 (2023-04-29)<\/h4>\n\n<ul>\n<li>Change: Note compatibility through WP 6.3+<\/li>\n<li>Change: Update copyright date (2023)<\/li>\n<li>Change: Add link to DEVELOPER-DOCS.md in README.md<\/li>\n<li>New: Add <code>.gitignore<\/code> file<\/li>\n<li>Unit tests:\n\n<ul>\n<li>Fix: Allow tests to run against current versions of WordPress<\/li>\n<li>New: Add <code>composer.json<\/code> for PHPUnit Polyfill dependency<\/li>\n<li>Change: Prevent PHP warnings due to missing core-related generated files<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p><em>Full changelog is available in <a href=\"https:\/\/github.com\/coffee2code\/wpuntexturize\/blob\/master\/CHANGELOG.md\">CHANGELOG.md<\/a>.<\/em><\/p>","raw_excerpt":"Prevent WordPress from converting single and double quotation marks into their curly alternatives.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/5706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"author":[{"embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/users\/3606"}],"replies":[{"embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=5706"}],"wp:attachment":[{"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=5706"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=5706"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=5706"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=5706"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=5706"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/am.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=5706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}