{"id":292964,"date":"2026-04-25T04:11:10","date_gmt":"2026-04-25T04:11:10","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/universal-permalink-engine\/"},"modified":"2026-04-25T04:11:27","modified_gmt":"2026-04-25T04:11:27","slug":"pcp-linkflow-engine","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/pcp-linkflow-engine\/","author":18677710,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"PCP Linkflow Engine","header_author":"PCPrajapat","header_description":"A comprehensive permalink management engine for WordPress. Supports custom slugs, structures, conflict detection, and REST API.","assets_banners_color":"1e357e","last_updated":"2026-04-25 04:11:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/pcp-linkflow-engine","header_author_uri":"https:\/\/devpcprajapat.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":78,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"pcprajapat","date":"2026-04-25 04:11:27"}},"upgrade_notice":{"1.0.0":"<p>Initial stable release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3515037,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3515037,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3515037,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3515037,"resolution":"1","location":"assets","locale":"","width":1758,"height":1466},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3515037,"resolution":"2","location":"assets","locale":"","width":1756,"height":1430},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3515037,"resolution":"3","location":"assets","locale":"","width":1757,"height":857},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3515037,"resolution":"4","location":"assets","locale":"","width":1753,"height":2476}},"screenshots":{"1":"Post Types tab \u2014 enable post types, set custom slugs, or remove slugs entirely using toggle switches.","2":"Taxonomies tab \u2014 enable taxonomies, set custom bases, or remove bases with a single toggle.","3":"Import \/ Export page \u2014 back up and restore all settings as a JSON file.","4":"REST API page \u2014 view all available endpoints, parameters, and example curl requests."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2662,186,561,538,286],"plugin_category":[45,55],"plugin_contributors":[246446,261020],"plugin_business_model":[],"class_list":["post-292964","plugin","type-plugin","status-publish","hentry","plugin_tags-permalink","plugin_tags-seo","plugin_tags-slug","plugin_tags-url","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-pcprajapat","plugin_contributors-phoolchandcms","plugin_committers-pcprajapat"],"banners":{"banner":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/banner-772x250.png?rev=3515037","banner_2x":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/banner-1544x500.png?rev=3515037","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/icon-128x128.png?rev=3515037","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/screenshot-1.png?rev=3515037","caption":"Post Types tab \u2014 enable post types, set custom slugs, or remove slugs entirely using toggle switches."},{"src":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/screenshot-2.png?rev=3515037","caption":"Taxonomies tab \u2014 enable taxonomies, set custom bases, or remove bases with a single toggle."},{"src":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/screenshot-3.png?rev=3515037","caption":"Import \/ Export page \u2014 back up and restore all settings as a JSON file."},{"src":"https:\/\/ps.w.org\/pcp-linkflow-engine\/assets\/screenshot-4.png?rev=3515037","caption":"REST API page \u2014 view all available endpoints, parameters, and example curl requests."}],"raw_content":"<!--section=description-->\n<p><strong>PCP Linkflow Engine<\/strong> gives you complete control over every URL on your WordPress site. Whether you need to remove the <code>\/product\/<\/code> prefix from WooCommerce products, add a custom base to a taxonomy, or restructure your page URLs \u2014 this plugin handles it all from a clean, modern admin interface.<\/p>\n\n<p>No code required. Changes take effect immediately with automatic rewrite rule flushing.<\/p>\n\n<h3>\ud83d\udd11 Key Features:<\/h3>\n\n<p><strong>Post Type URL Control<\/strong>\n- \u270f\ufe0f Set a <strong>custom slug<\/strong> for any public post type (e.g. <code>\/shop\/<\/code> instead of <code>\/product\/<\/code>)\n- \ud83d\uddd1\ufe0f <strong>Remove the slug entirely<\/strong> \u2014 serve products, posts, or CPTs at root level (e.g. <code>\/jacket\/<\/code> instead of <code>\/product\/jacket\/<\/code>)\n- \ud83d\udcc4 Full support for <strong>hierarchical post types<\/strong> like Pages (e.g. <code>\/pages\/about\/team\/<\/code>)\n- \ud83d\uded2 <strong>WooCommerce compatible<\/strong> \u2014 works correctly with the shop page, product archives, <code>is_product()<\/code>, and all WooCommerce template hooks<\/p>\n\n<p><strong>Taxonomy URL Control<\/strong>\n- \u270f\ufe0f Set a <strong>custom base<\/strong> for any public taxonomy (e.g. <code>\/topics\/<\/code> instead of <code>\/category\/<\/code>)\n- \ud83d\uddd1\ufe0f <strong>Remove the base entirely<\/strong> \u2014 serve term archives at root level (e.g. <code>\/clothing\/<\/code> instead of <code>\/product-category\/clothing\/<\/code>)\n- \ud83c\udf33 Full support for <strong>hierarchical taxonomies<\/strong> \u2014 sub-terms work correctly (e.g. <code>\/clothing\/accessories\/<\/code>)\n- \u2705 Correct <code>is_tax()<\/code>, admin bar links, and taxonomy templates when base is removed<\/p>\n\n<p><strong>Developer Friendly<\/strong>\n- \ud83d\udd0c Filter hooks: <code>pcplfe_post_type_slug<\/code>, <code>pcplfe_taxonomy_slug<\/code>, <code>pcplfe_permalink_structure<\/code>, <code>pcplfe_remove_post_type_slug<\/code>, <code>pcplfe_remove_taxonomy_slug<\/code>\n- \ud83c\udf10 <strong>REST API<\/strong> \u2014 read and write settings via <code>\/wp-json\/pcplfe\/v1\/<\/code>\n- \ud83d\udce6 <strong>Import \/ Export<\/strong> \u2014 back up and restore all settings as JSON\n- \ud83e\udde9 <strong>PSR-4 autoloaded<\/strong> OOP architecture under the <code>PCPLFE\\<\/code> namespace<\/p>\n\n<p><strong>Modern Admin UI<\/strong>\n- \ud83c\udfa8 Clean, Tailwind-inspired design with toggle switches\n- \ud83d\udcd1 Tabbed settings for Post Types and Taxonomies\n- \ud83d\udd04 POST \u2192 Redirect \u2192 GET pattern \u2014 no duplicate saves on refresh\n- \ud83d\udcbe Active tab preserved across saves and page refreshes<\/p>\n\n<h3>REST API<\/h3>\n\n<p>PCP Linkflow Engine exposes a REST API under the <code>pcplfe\/v1<\/code> namespace. All endpoints require the <code>manage_options<\/code> capability.<\/p>\n\n<p><strong>Authentication<\/strong><\/p>\n\n<p>Use WordPress Application Passwords (WordPress 5.6+). Generate one at <strong>Users \u2192 Your Profile \u2192 Application Passwords<\/strong>, then pass it with every request:<\/p>\n\n<pre><code>-u \"your-username:xxxx xxxx xxxx xxxx xxxx xxxx\"\n<\/code><\/pre>\n\n<h4>Endpoints<\/h4>\n\n<p><strong>GET \/wp-json\/pcplfe\/v1\/settings<\/strong><\/p>\n\n<p>Returns all saved post type and taxonomy settings.<\/p>\n\n<pre><code>curl -u \"admin:xxxx xxxx xxxx xxxx xxxx xxxx\" \\\n  https:\/\/yoursite.com\/wp-json\/pcplfe\/v1\/settings\n<\/code><\/pre>\n\n<p>Example response:<\/p>\n\n<pre><code>{\n  \"post_type_settings\": {\n    \"post\": { \"enabled\": true, \"custom_slug\": \"articles\", \"remove_slug\": false }\n  },\n  \"taxonomy_settings\": {\n    \"category\": { \"enabled\": true, \"custom_base\": \"topics\", \"remove_base\": false }\n  }\n}\n<\/code><\/pre>\n\n<p><strong>POST \/wp-json\/pcplfe\/v1\/settings<\/strong><\/p>\n\n<p>Save post type and taxonomy settings from a JSON body.<\/p>\n\n<pre><code>curl -u \"admin:xxxx xxxx xxxx xxxx xxxx xxxx\" \\\n  -X POST \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"post_type_settings\": {\n      \"post\": { \"enabled\": true, \"custom_slug\": \"articles\", \"remove_slug\": false }\n    },\n    \"taxonomy_settings\": {\n      \"category\": { \"enabled\": true, \"custom_base\": \"topics\", \"remove_base\": false }\n    }\n  }' \\\n  https:\/\/yoursite.com\/wp-json\/pcplfe\/v1\/settings\n<\/code><\/pre>\n\n<p><strong>GET \/wp-json\/pcplfe\/v1\/permalink?post_id=X<\/strong><\/p>\n\n<p>Returns the custom permalink record for a given post ID.<\/p>\n\n<pre><code>curl -u \"admin:xxxx xxxx xxxx xxxx xxxx xxxx\" \\\n  \"https:\/\/yoursite.com\/wp-json\/pcplfe\/v1\/permalink?post_id=123\"\n<\/code><\/pre>\n\n<p>Example response:<\/p>\n\n<pre><code>{\n  \"post_id\": 123,\n  \"post_type\": \"post\",\n  \"default_permalink\": \"https:\/\/yoursite.com\/articles\/hello-world\/\",\n  \"custom_permalink\": \"https:\/\/yoursite.com\/my-custom-slug\/\",\n  \"record\": { \"permalink\": \"my-custom-slug\" }\n}\n<\/code><\/pre>\n\n<p><strong>POST \/wp-json\/pcplfe\/v1\/permalink<\/strong><\/p>\n\n<p>Save a custom permalink for a specific post. Send an empty <code>permalink<\/code> value to remove the override.<\/p>\n\n<pre><code>curl -u \"admin:xxxx xxxx xxxx xxxx xxxx xxxx\" \\\n  -X POST \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"post_id\": 123,\n    \"post_type\": \"post\",\n    \"permalink\": \"my-custom-slug\"\n  }' \\\n  https:\/\/yoursite.com\/wp-json\/pcplfe\/v1\/permalink\n<\/code><\/pre>\n\n<p>To remove a custom permalink override:<\/p>\n\n<pre><code>curl -u \"admin:xxxx xxxx xxxx xxxx xxxx xxxx\" \\\n  -X POST \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"post_id\": 123,\n    \"post_type\": \"post\",\n    \"permalink\": \"\"\n  }' \\\n  https:\/\/yoursite.com\/wp-json\/pcplfe\/v1\/permalink\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it via <strong>Plugins \u2192 Add New<\/strong> in WordPress.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Navigate to <strong>Linkflow Engine<\/strong> in the WordPress admin sidebar.<\/li>\n<li>Enable the post types or taxonomies you want to customise, enter your desired slugs, and click <strong>Save Settings<\/strong>.<\/li>\n<li>That's it \u2014 rewrite rules are flushed automatically on save.<\/li>\n<\/ol>\n\n<p><strong>Requirements:<\/strong>\n- WordPress 5.8 or higher\n- PHP 7.4 or higher\n- WooCommerce 5.0+ (optional, for product\/taxonomy URL features)<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20break%20my%20existing%20urls%3F\"><h3>Will this break my existing URLs?<\/h3><\/dt>\n<dd><p>No. The plugin only modifies URLs for post types and taxonomies you explicitly enable. All other URLs remain untouched. If you change a slug, existing URLs will still be handled by WordPress's built-in redirect logic.<\/p><\/dd>\n<dt id=\"does%20remove%20slug%20work%20with%20woocommerce%20products%3F\"><h3>Does Remove Slug work with WooCommerce products?<\/h3><\/dt>\n<dd><p>Yes. When Remove Slug is enabled for Products, product detail pages load at <code>\/product-name\/<\/code> and WooCommerce's <code>is_product()<\/code>, template hierarchy, cart, and checkout all work correctly.<\/p><\/dd>\n<dt id=\"does%20the%20woocommerce%20shop%20page%20still%20work%20after%20setting%20a%20custom%20slug%20for%20pages%3F\"><h3>Does the WooCommerce shop page still work after setting a custom slug for Pages?<\/h3><\/dt>\n<dd><p>Yes. The plugin automatically resolves page IDs so WooCommerce's <code>pre_get_posts<\/code> hook correctly detects the shop page and displays the product archive regardless of the page URL prefix.<\/p><\/dd>\n<dt id=\"do%20sub-category%20urls%20work%20with%20remove%20base%3F\"><h3>Do sub-category URLs work with Remove Base?<\/h3><\/dt>\n<dd><p>Yes. Hierarchical taxonomy terms are fully supported. For example, <code>\/clothing\/accessories\/<\/code> resolves correctly when Remove Base is enabled for the <code>product_cat<\/code> taxonomy.<\/p><\/dd>\n<dt id=\"can%20i%20use%20a%20multi-segment%20custom%20slug%3F\"><h3>Can I use a multi-segment custom slug?<\/h3><\/dt>\n<dd><p>Yes. You can enter a path like <code>product\/test<\/code> as the Custom Slug for a post type. The plugin sanitises each segment individually, so the slash is preserved and the correct rewrite rules are generated.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20wordpress%20default%20taxonomies%20%28category%2C%20post_tag%29%3F\"><h3>Does it work with WordPress default taxonomies (category, post_tag)?<\/h3><\/dt>\n<dd><p>Yes. The plugin correctly uses each taxonomy's native WordPress query variable (<code>category_name<\/code> for category, <code>tag<\/code> for post_tag) so custom base slugs work without any additional configuration.<\/p><\/dd>\n<dt id=\"can%20i%20export%20my%20settings%20to%20use%20on%20another%20site%3F\"><h3>Can I export my settings to use on another site?<\/h3><\/dt>\n<dd><p>Yes. Use the <strong>Import \/ Export<\/strong> page under the Linkflow Engine menu to download a JSON backup of all settings and custom permalinks, and re-import them on any other site.<\/p><\/dd>\n<dt id=\"is%20it%20translation-ready%3F\"><h3>Is it translation-ready?<\/h3><\/dt>\n<dd><p>Yes. All strings are wrapped in standard WordPress i18n functions using the <code>pcp-linkflow-engine<\/code> text domain.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release of PCP Linkflow Engine.<\/li>\n<li>Custom slug support for all public post types.<\/li>\n<li>Remove Slug support with WooCommerce product template compatibility.<\/li>\n<li>Custom base and Remove Base support for all public taxonomies.<\/li>\n<li>Hierarchical taxonomy sub-term URL resolution.<\/li>\n<li>WooCommerce shop page compatibility (page_id normalization).<\/li>\n<li>Multi-segment custom slug support (e.g. <code>product\/test<\/code>).<\/li>\n<li>Modern admin UI with toggle switches and tabbed settings.<\/li>\n<li>POST \u2192 Redirect \u2192 GET for reliable settings saves.<\/li>\n<li>Import \/ Export settings as JSON.<\/li>\n<li>REST API endpoints under <code>\/wp-json\/pcplfe\/v1\/<\/code>.<\/li>\n<li>Developer filter hooks for all major permalink values.<\/li>\n<\/ul>","raw_excerpt":"Full URL control for every post type and taxonomy. Customize slugs, remove bases, and define permalink structures - all from a clean admin interface.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/292964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=292964"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pcprajapat"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=292964"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=292964"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=292964"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=292964"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=292964"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=292964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}