{"id":202599,"date":"2024-08-22T18:09:59","date_gmt":"2024-08-22T18:09:59","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/page-marker\/"},"modified":"2026-09-24T15:30:33","modified_gmt":"2026-09-24T15:30:33","slug":"page-marker","status":"publish","type":"plugin","link":"https:\/\/ltz.wordpress.org\/plugins\/page-marker\/","author":21049723,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"1.0.4","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Page Marker \u2013 Visual Feedback & Page Annotations","header_author":"Rodion Vynohradov","header_description":"Easy way to leave comments on the page and communicate with other users.","assets_banners_color":"bbbbbb","last_updated":"2026-09-24 15:30:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":1966,"num_ratings":1,"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":"rodionvynohradov","date":"2024-08-23 12:29:59","revision":3140371},"1.0.1":{"tag":"1.0.1","author":"rodionvynohradov","date":"2024-08-26 14:34:04","revision":3141770},"1.0.2":{"tag":"1.0.2","author":"rodionvynohradov","date":"2024-12-04 12:02:27","revision":3202373},"1.0.3":{"tag":"1.0.3","author":"rodionvynohradov","date":"2026-09-24 14:48:25","revision":3711532},"1.0.4":{"tag":"1.0.4","author":"rodionvynohradov","date":"2026-09-24 15:30:33","revision":3711616}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3711616,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3711616,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3711616,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3711616,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3711616,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Page Marker demo\",\"description\":\"Sample Page with a few demo markers, an assignee and a reply.\",\"author\":\"rodionvynohradov\",\"categories\":[\"Collaboration\"]},\"landingPage\":\"\\\/sample-page\\\/\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"login\":true,\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"page-marker\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\nuse Page_Marker\\\\Core\\\\Cache;\\n\\nglobal $wpdb;\\n\\n$now = current_time( 'mysql' );\\n$page = get_page_by_path( 'sample-page' );\\n$post_id = $page ? $page->ID : 2;\\n\\n$designer_id = username_exists( 'designer' ) ?: wp_insert_user( [\\n    'user_login' => 'designer',\\n    'user_pass' => wp_generate_password(),\\n    'user_email' => 'designer@example.com',\\n    'display_name' => 'Designer',\\n    'role' => 'editor',\\n] );\\n\\n$editor_content = function ( string $html ): string {\\n    return wp_json_encode( [\\n        'time' => time() * 1000,\\n        'blocks' => [ [ 'id' => wp_generate_password( 10, false ), 'type' => 'paragraph', 'data' => [ 'text' => $html ] ] ],\\n        'version' => '2.30.5',\\n    ], JSON_UNESCAPED_SLASHES );\\n};\\n\\n$markers = [\\n    [\\n        'title' => 'Make the page title bigger on mobile',\\n        'description' => 'The title looks <b>too small<\\\/b> on phones. Let\\\\'s try 40px.',\\n        'priority' => 'high',\\n        'assignee' => $designer_id,\\n        'coords' => [ 'x' => 260, 'y' => 230, 'screen_width' => 1280 ],\\n        'reply' => 'Good catch! I\\\\'ll update the typography today.',\\n        'reply_author' => $designer_id,\\n    ],\\n    [\\n        'title' => 'Replace this text with a client testimonial',\\n        'description' => 'We have a great quote from the <i>last project<\\\/i>, it fits here perfectly.',\\n        'priority' => 'highest',\\n        'assignee' => 1,\\n        'coords' => [ 'x' => -220, 'y' => 420, 'screen_width' => 1280 ],\\n    ],\\n    [\\n        'title' => 'Typo in this paragraph',\\n        'description' => 'Small one, but let\\\\'s fix it before the launch.',\\n        'priority' => 'low',\\n        'assignee' => $designer_id,\\n        'coords' => [ 'x' => 300, 'y' => 620, 'screen_width' => 1280 ],\\n    ],\\n];\\n\\nforeach ( $markers as $marker ) {\\n    $wpdb->insert( Cache::db()->db_page_markers_table(), [\\n        'post_id' => $post_id,\\n        'title' => $marker['title'],\\n        'description' => $editor_content( $marker['description'] ),\\n        'status' => 'new',\\n        'priority' => $marker['priority'],\\n        'coords' => wp_json_encode( $marker['coords'] ),\\n        'id_on_page' => 'page-marker-' . strtolower( wp_generate_password( 20, false ) ),\\n        'assignee' => $marker['assignee'],\\n        'viewed' => 0,\\n        'author' => 1,\\n        'created_at' => $now,\\n        'updated_at' => $now,\\n    ] );\\n    if ( ! empty( $marker['reply'] ) ) {\\n        $wpdb->insert( Cache::db()->db_replies_table(), [\\n            'marker_id' => $wpdb->insert_id,\\n            'content' => $editor_content( $marker['reply'] ),\\n            'reaction' => -1,\\n            'author' => $marker['reply_author'],\\n            'created_at' => $now,\\n            'updated_at' => $now,\\n        ] );\\n    }\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.0.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3711616,"resolution":"1","location":"assets","locale":"","width":1857,"height":976},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3711616,"resolution":"2","location":"assets","locale":"","width":1857,"height":976},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3711616,"resolution":"3","location":"assets","locale":"","width":1857,"height":976},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3711616,"resolution":"4","location":"assets","locale":"","width":1857,"height":976}},"screenshots":{"1":"Pin a marker anywhere on the page: add a title, assign a teammate and set the priority. Filter markers in the side panel.","2":"All markers in one place: new markers, pages with feedback, filters by status, priority, author and assignee.","3":"Choose which user roles can see and create markers.","4":"Built-in health check: AJAX, database tables and lost markers of deleted pages."}},"plugin_section":[],"plugin_tags":[15354,253348,145645,6389,108],"plugin_category":[44,46],"plugin_contributors":[282527],"plugin_business_model":[],"class_list":["post-202599","plugin","type-plugin","status-publish","hentry","plugin_tags-annotations","plugin_tags-bug-report","plugin_tags-client-feedback","plugin_tags-collaboration","plugin_tags-feedback","plugin_category-discussion-and-community","plugin_category-editor-and-writing","plugin_contributors-rodionvynohradov","plugin_committers-rodionvynohradov"],"banners":{"banner":"https:\/\/ps.w.org\/page-marker\/assets\/banner-772x250.png?rev=3711616","banner_2x":"https:\/\/ps.w.org\/page-marker\/assets\/banner-1544x500.png?rev=3711616","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/page-marker\/assets\/icon-128x128.png?rev=3711616","icon_2x":"https:\/\/ps.w.org\/page-marker\/assets\/icon-256x256.png?rev=3711616","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/page-marker\/assets\/screenshot-1.png?rev=3711616","caption":"Pin a marker anywhere on the page: add a title, assign a teammate and set the priority. Filter markers in the side panel."},{"src":"https:\/\/ps.w.org\/page-marker\/assets\/screenshot-2.png?rev=3711616","caption":"All markers in one place: new markers, pages with feedback, filters by status, priority, author and assignee."},{"src":"https:\/\/ps.w.org\/page-marker\/assets\/screenshot-3.png?rev=3711616","caption":"Choose which user roles can see and create markers."},{"src":"https:\/\/ps.w.org\/page-marker\/assets\/screenshot-4.png?rev=3711616","caption":"Built-in health check: AJAX, database tables and lost markers of deleted pages."}],"raw_content":"<!--section=description-->\n<p><strong>Stop sending screenshots with red arrows.<\/strong> Page Marker lets your team and clients leave comments (markers) exactly where the problem is \u2014 right on the live page of your WordPress site.<\/p>\n\n<p>Click anywhere on the page, describe the issue, choose who is responsible and set the priority. The marker stays attached to that exact spot, so nobody has to guess what \"the button at the top\" means.<\/p>\n\n<p>Everything happens inside your WordPress: no third-party service, no extra accounts, no monthly fee. Your data stays in your own database.<\/p>\n\n<h3>Who is it for?<\/h3>\n\n<ul>\n<li><strong>Agencies and freelancers<\/strong> \u2014 collect client feedback and change requests directly on the site.<\/li>\n<li><strong>Content and marketing teams<\/strong> \u2014 review pages before publishing and leave notes for editors.<\/li>\n<li><strong>Developers and QA<\/strong> \u2014 report bugs tied to a specific place on a specific page and screen width.<\/li>\n<\/ul>\n\n<h3>Plugin Features<\/h3>\n\n<ul>\n<li><strong>Markers anywhere on the page<\/strong> \u2014 pin a comment to any element of any post or page on the front end.<\/li>\n<li><strong>Rich descriptions<\/strong> \u2014 format text with bold, italic and links.<\/li>\n<li><strong>Assignees<\/strong> \u2014 choose the user responsible for the task.<\/li>\n<li><strong>Priorities<\/strong> \u2014 highest, high, medium or low.<\/li>\n<li><strong>Statuses<\/strong> \u2014 new, reopened, resolved and closed. Resolved and closed markers are hidden from the page automatically.<\/li>\n<li><strong>Replies<\/strong> \u2014 discuss every marker in a thread right next to the problem.<\/li>\n<li><strong>Drag &amp; drop<\/strong> \u2014 adjust the marker position when the layout changes.<\/li>\n<li><strong>Screen width aware<\/strong> \u2014 markers remember the screen width they were created for, so desktop and mobile feedback don't mix.<\/li>\n<li><strong>Front-end panel<\/strong> \u2014 filter markers by status, priority and screen width, minimize or hide them, and switch the sidebar position.<\/li>\n<li><strong>Admin dashboard<\/strong> \u2014 see all markers grouped by page, new notifications, filters and bulk actions.<\/li>\n<li><strong>Access control<\/strong> \u2014 only the user roles you allow can see and create markers.<\/li>\n<li><strong>Health check<\/strong> \u2014 built-in diagnostics for AJAX, database and \"lost\" markers (markers of deleted pages) with one-click cleanup.<\/li>\n<li><strong>Multisite support<\/strong> and <strong>translation ready<\/strong> (Ukrainian translation included).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload <code>page-marker<\/code> to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Go to the \"Admin panel &gt; Page Marker &gt; Plugin Settings page\" to select which settings you'd like to use.<\/li>\n<li>Don't forget to visit this page to get some useful information \"Admin Panel &gt; Page Marker &gt; Helpful Information\".<\/li>\n<\/ol>\n\n<h3>Minimum PHP requirements.<\/h3>\n\n<p>Page Marker requires PHP 7.4+<\/p>\n\n<h3>Vendors<\/h3>\n\n<ol>\n<li>We want to thank the team of professionals who designed and developed the beautiful product Editor.js.<\/li>\n<\/ol>\n\n<h3>Source code<\/h3>\n\n<p>https:\/\/gitlab.com\/rodion-wp-plugins\/page-marker\/-\/tree\/main\/src\/wp-content\/plugins\/page-marker<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"who%20can%20see%20the%20markers%3F\"><h3>Who can see the markers?<\/h3><\/dt>\n<dd><p>Only logged-in users with the roles you allow on the \"Page Marker &gt; Plugin Settings\" page. Regular visitors of your site never see markers or the panel.<\/p><\/dd>\n<dt id=\"do%20i%20need%20an%20account%20in%20any%20external%20service%3F\"><h3>Do I need an account in any external service?<\/h3><\/dt>\n<dd><p>No. Page Marker works entirely inside your WordPress. All markers and replies are stored in your own database.<\/p><\/dd>\n<dt id=\"can%20my%20clients%20leave%20feedback%3F\"><h3>Can my clients leave feedback?<\/h3><\/dt>\n<dd><p>Yes. Create a user account for your client with a role that is allowed in the plugin settings, and they will be able to add markers and reply.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20support%3F\"><h3>How do I get support?<\/h3><\/dt>\n<dd><p>Please ask your question in the <a href=\"https:\/\/wordpress.org\/support\/plugin\/page-marker\/\">support forum<\/a> \u2014 this way the answer helps other users too. You can also write to wp.page.marker@gmail.com.<\/p><\/dd>\n<dt id=\"where%20can%20i%20report%20a%20bug%20or%20suggest%20a%20feature%3F\"><h3>Where can I report a bug or suggest a feature?<\/h3><\/dt>\n<dd><p>In the <a href=\"https:\/\/wordpress.org\/support\/plugin\/page-marker\/\">support forum<\/a>. Ideas and feedback are very welcome!<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>The change log is located in the <code>changelog.md<\/code> file in the plugin directory.<\/p>","raw_excerpt":"Pin visual feedback right on your pages: assign a teammate, set priority, discuss in replies and track every marker until it&#039;s resolved.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/202599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=202599"}],"author":[{"embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rodionvynohradov"}],"wp:attachment":[{"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=202599"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=202599"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=202599"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=202599"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=202599"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ltz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=202599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}