{
    "id": 1023,
    "date": "2026-05-20T18:32:03",
    "date_gmt": "2026-05-20T16:32:03",
    "guid": {
        "rendered": "https:\/\/rewolucjaai.pl\/?page_id=1023"
    },
    "modified": "2026-05-20T18:32:05",
    "modified_gmt": "2026-05-20T16:32:05",
    "slug": "pqm-developer-and-integration-notes",
    "status": "publish",
    "type": "page",
    "link": "https:\/\/rewolucjaai.pl\/pl\/?page_id=1023",
    "title": {
        "rendered": "PQM \u2013 Notatki deweloperskie i integracyjne"
    },
    "content": {
        "rendered": "<p><!--\nTitle: PQM \u2013 Developer and Integration Notes\nDescription: Developer and integration notes for PQM implementations.\nSuggested URL slug: pqm-developer-and-integration-notes\nPrepared for: rewolucjaai.pl \/ PQM English documentation\n--><\/p>\n<style>\n.pqm-doc{font-family:Arial,Helvetica,sans-serif;line-height:1.65;color:#1f2937;max-width:1040px;margin:0 auto;padding:24px}\n.pqm-doc h1{font-size:40px;line-height:1.15;margin:0 0 18px;color:#111827}\n.pqm-doc h2{font-size:28px;line-height:1.25;margin:38px 0 14px;color:#111827}\n.pqm-doc h3{font-size:21px;line-height:1.35;margin:26px 0 10px;color:#111827}\n.pqm-doc p{margin:0 0 16px}\n.pqm-doc ul,.pqm-doc ol{margin:0 0 20px 24px;padding:0}\n.pqm-doc li{margin:6px 0}\n.pqm-doc code{background:#f3f4f6;border:1px solid #e5e7eb;padding:2px 6px;border-radius:6px}\n.pqm-doc pre{background:#111827;color:#f9fafb;padding:16px;border-radius:12px;overflow:auto}\n.pqm-doc pre code{background:transparent;border:0;color:inherit;padding:0}\n.pqm-doc .lead{font-size:19px;color:#374151;margin-bottom:24px}\n.pqm-doc .note{background:#f8fafc;border-left:5px solid #2563eb;padding:16px 18px;border-radius:10px;margin:22px 0}\n.pqm-doc .warning{background:#fff7ed;border-left:5px solid #f97316;padding:16px 18px;border-radius:10px;margin:22px 0}\n.pqm-doc .success{background:#f0fdf4;border-left:5px solid #16a34a;padding:16px 18px;border-radius:10px;margin:22px 0}\n.pqm-doc .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin:22px 0}\n.pqm-doc .card{border:1px solid #e5e7eb;border-radius:16px;padding:18px;background:#fff;box-shadow:0 8px 24px rgba(15,23,42,.06)}\n.pqm-doc .toc{background:#f9fafb;border:1px solid #e5e7eb;border-radius:16px;padding:18px;margin:26px 0}\n.pqm-doc .toc a{color:#2563eb;text-decoration:none}\n.pqm-doc table{width:100%;border-collapse:collapse;margin:20px 0;overflow:hidden;border-radius:12px}\n.pqm-doc th,.pqm-doc td{border:1px solid #e5e7eb;padding:10px;text-align:left;vertical-align:top}\n.pqm-doc th{background:#f3f4f6;color:#111827}\n.pqm-doc .muted{color:#6b7280}\n.pqm-doc .cta{background:#111827;color:#fff;padding:22px;border-radius:18px;margin:32px 0}\n.pqm-doc .cta h2,.pqm-doc .cta h3{color:#fff;margin-top:0}\n.pqm-doc .cta a{color:#bfdbfe}\n<\/style>\n<article class=\"pqm-doc\">\n<h1>PQM \u2013 Notatki deweloperskie i integracyjne<\/h1>\n<p class=\"lead\">This document is for technical administrators and developers implementing PQM in WordPress environments. It covers hosting, staging, WooCommerce integration, customer panel caching, AJAX security, updates, modules, logging and performance.<\/p>\n<h2>Environment<\/h2>\n<p>PQM runs as a WordPress plugin, so the quality of the hosting environment directly affects reliability. Production workflow systems should not be deployed on overloaded hosting without access to logs.<\/p>\n<h3>Recommendations<\/h3>\n<ul>\n<li>current WordPress version,<\/li>\n<li>PHP version compatible with the plugin,<\/li>\n<li>regular file and database backups,<\/li>\n<li>access to PHP error logs,<\/li>\n<li>staging environment for updates,<\/li>\n<li>proper SMTP configuration,<\/li>\n<li>cache rules that do not break admin screens or AJAX calls.<\/li>\n<\/ul>\n<h2>Staging<\/h2>\n<p>Use a staging environment for testing new PQM versions, modules, workflow changes, email templates and the customer panel. Customer data should be protected or anonymized on staging.<\/p>\n<h2>WooCommerce integration<\/h2>\n<p>If PQM is used with WooCommerce, define exactly when a WooCommerce order creates a production task. Avoid creating multiple tasks or duplicate emails for the same order event.<\/p>\n<h3>Implementation questions<\/h3>\n<ul>\n<li>Should a task be created immediately after order placement?<\/li>\n<li>Should a task be created only after payment?<\/li>\n<li>Does one order create one task or multiple tasks?<\/li>\n<li>Should WooCommerce status changes update PQM statuses?<\/li>\n<li>Should customer email be sent by WooCommerce, PQM or both?<\/li>\n<\/ul>\n<h2>Customer panel and cache<\/h2>\n<p>The customer panel page should not be aggressively cached if it displays dynamic task data. Otherwise, customers may see outdated status information. Exclude the page from cache or load dynamic data through AJAX.<\/p>\n<h2>AJAX and security<\/h2>\n<p>All actions that save data should verify nonces, check permissions and sanitize input. Output should be escaped according to context.<\/p>\n<h3>Good practices<\/h3>\n<ul>\n<li><code>check_ajax_referer()<\/code> for AJAX requests,<\/li>\n<li><code>current_user_can()<\/code> for admin actions,<\/li>\n<li><code>sanitize_text_field()<\/code>, <code>absint()<\/code>, <code>sanitize_email()<\/code> for input,<\/li>\n<li><code>esc_html()<\/code>, <code>esc_attr()<\/code>, <code>esc_url()<\/code> for output,<\/li>\n<li><code>$wpdb-&gt;prepare()<\/code> for parameterized SQL queries.<\/li>\n<\/ul>\n<h2>Updates and backup<\/h2>\n<p>Before updating production PQM installations, create a full database and file backup. In production companies, perform major updates outside peak working hours and test them on staging first.<\/p>\n<h2>Modules<\/h2>\n<p>Modules should not cause critical errors if the main PQM plugin is inactive. A module should detect missing PQM and display a clear admin notice instead of failing.<\/p>\n<h3>Minimum module requirements<\/h3>\n<ul>\n<li>own plugin header,<\/li>\n<li>PQM presence check,<\/li>\n<li>PQM version check,<\/li>\n<li>separate text domain,<\/li>\n<li>safe file loading,<\/li>\n<li>no class or function name conflicts,<\/li>\n<li>safe deactivation behavior.<\/li>\n<\/ul>\n<h2>Error logging<\/h2>\n<p>During implementation, enable WordPress debug logging. On production, do not display errors to users, but keep logs accessible to administrators.<\/p>\n<pre><code>define( 'WP_DEBUG', true );\ndefine( 'WP_DEBUG_LOG', true );\ndefine( 'WP_DEBUG_DISPLAY', false );<\/code><\/pre>\n<h2>Performance<\/h2>\n<p>PQM works with tasks, reports and historical data. As the number of tasks grows, database indexes, date filtering, pagination and efficient queries become important.<\/p>\n<h2>Implementation checklist<\/h2>\n<ol>\n<li>Install on staging.<\/li>\n<li>Configure statuses and departments.<\/li>\n<li>Test task flow.<\/li>\n<li>Test email automation.<\/li>\n<li>Test customer panel.<\/li>\n<li>Test reports.<\/li>\n<li>Train users.<\/li>\n<li>Back up production.<\/li>\n<li>Deploy to production.<\/li>\n<li>Monitor logs after launch.<\/li>\n<\/ol>\n<div class=\"success\">\n<p>A reliable technical implementation is predictable: staging, backup, tests, documented workflow and only then production deployment.<\/p>\n<\/div>\n<\/article>",
        "protected": false
    },
    "excerpt": {
        "rendered": "<p>PQM \u2013 Developer and Integration Notes This document is for technical administrators and developers implementing PQM in WordPress environments. It covers hosting, staging, WooCommerce integration, customer panel caching, AJAX security, updates, modules, logging and performance. Environment PQM runs as a WordPress plugin, so the quality of the hosting environment directly affects reliability. Production workflow systems [&hellip;]<\/p>",
        "protected": false
    },
    "author": 1,
    "featured_media": 0,
    "parent": 0,
    "menu_order": 0,
    "comment_status": "closed",
    "ping_status": "closed",
    "template": "",
    "meta": {
        "footnotes": ""
    },
    "class_list": [
        "post-1023",
        "page",
        "type-page",
        "status-publish",
        "hentry"
    ],
    "blocksy_meta": [],
    "jetpack_sharing_enabled": true,
    "_links": {
        "self": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages\/1023",
                "targetHints": {
                    "allow": [
                        "GET"
                    ]
                }
            }
        ],
        "collection": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages"
            }
        ],
        "about": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/types\/page"
            }
        ],
        "author": [
            {
                "embeddable": true,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/users\/1"
            }
        ],
        "replies": [
            {
                "embeddable": true,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1023"
            }
        ],
        "version-history": [
            {
                "count": 1,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages\/1023\/revisions"
            }
        ],
        "predecessor-version": [
            {
                "id": 1024,
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=\/wp\/v2\/pages\/1023\/revisions\/1024"
            }
        ],
        "wp:attachment": [
            {
                "href": "https:\/\/rewolucjaai.pl\/pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1023"
            }
        ],
        "curies": [
            {
                "name": "wp",
                "href": "https:\/\/api.w.org\/{rel}",
                "templated": true
            }
        ]
    }
}