{"id":2,"date":"2026-03-18T10:40:35","date_gmt":"2026-03-18T10:40:35","guid":{"rendered":"http:\/\/wp.10pro.dk\/?page_id=2"},"modified":"2026-03-18T10:55:05","modified_gmt":"2026-03-18T10:55:05","slug":"sample-page","status":"publish","type":"page","link":"https:\/\/wp.10pro.dk\/index.php\/sample-page\/","title":{"rendered":"Sample Page"},"content":{"rendered":"        <div class=\"simple-chat-box\" style=\"max-width:600px;border:1px solid #ccc;padding:16px;border-radius:8px;\">\n            <h3>Simpel chat<\/h3>\n\n            \n            <div class=\"simple-chat-messages\" style=\"height:300px;overflow-y:auto;border:1px solid #ddd;padding:10px;margin-bottom:16px;background:#fafafa;\">\n                                                            <div style=\"margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #eee;\">\n                            <strong>Ulrik<\/strong>\n                            <small style=\"color:#666;\">\n                                (2026-03-18 10:47:38)\n                            <\/small>\n                            <div>Test<\/div>\n                        <\/div>\n                                                <\/div>\n\n            <form method=\"post\">\n                <input type=\"hidden\" id=\"simple_chat_nonce\" name=\"simple_chat_nonce\" value=\"c055e5c13d\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/index.php\/wp-json\/wp\/v2\/pages\/2\" \/>\n                <p>\n                    <label for=\"simple_chat_username\">Navn<\/label><br>\n                    <input type=\"text\" id=\"simple_chat_username\" name=\"simple_chat_username\" required style=\"width:100%;padding:8px;\">\n                <\/p>\n\n                <p>\n                    <label for=\"simple_chat_message\">Besked<\/label><br>\n                    <textarea id=\"simple_chat_message\" name=\"simple_chat_message\" required rows=\"4\" style=\"width:100%;padding:8px;\"><\/textarea>\n                <\/p>\n\n                <p>\n                    <button type=\"submit\" name=\"simple_chat_submit\" value=\"1\">Send<\/button>\n                <\/p>\n            <\/form>\n        <\/div>\n        \n\n\n\n<p>Her er koden til plugind<\/p>\n\n\n<p>&lt;?php<br \/>\/**<br \/>* Plugin Name: Simple Chat Demo<br \/>* Description: Et simpelt chat-plugin med shortcode.<br \/>* Version: 1.0.0<br \/>* Author: Ulrik<br \/>*\/<\/p>\n<p>if (!defined(&#8216;ABSPATH&#8217;)) {<br \/>exit;<br \/>}<\/p>\n<p>class Simple_Chat_Demo {<br \/>private $table_name;<\/p>\n<p>public function __construct() {<br \/>global $wpdb;<br \/>$this-&gt;table_name = $wpdb-&gt;prefix . &#8216;simple_chat_messages&#8217;;<\/p>\n<p>register_activation_hook(__FILE__, array($this, &#8216;activate&#8217;));<br \/>add_shortcode(&#8216;simple_chat&#8217;, array($this, &#8216;render_chat&#8217;));<br \/>add_action(&#8216;init&#8217;, array($this, &#8216;handle_form_submit&#8217;));<br \/>}<\/p>\n<p>public function activate() {<br \/>global $wpdb;<br \/>$charset_collate = $wpdb-&gt;get_charset_collate();<\/p>\n<p>$sql = &#8220;CREATE TABLE {$this-&gt;table_name} (<br \/>id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,<br \/>username VARCHAR(100) NOT NULL,<br \/>message TEXT NOT NULL,<br \/>created_at DATETIME NOT NULL,<br \/>PRIMARY KEY (id)<br \/>) $charset_collate;&#8221;;<\/p>\n<p>require_once ABSPATH . &#8216;wp-admin\/includes\/upgrade.php&#8217;;<br \/>dbDelta($sql);<br \/>}<\/p>\n<p>public function handle_form_submit() {<br \/>if (<br \/>!isset($_POST[&#8216;simple_chat_submit&#8217;]) ||<br \/>!isset($_POST[&#8216;simple_chat_nonce&#8217;])<br \/>) {<br \/>return;<br \/>}<\/p>\n<p>if (!wp_verify_nonce($_POST[&#8216;simple_chat_nonce&#8217;], &#8216;simple_chat_send&#8217;)) {<br \/>return;<br \/>}<\/p>\n<p>global $wpdb;<\/p>\n<p>$username = isset($_POST[&#8216;simple_chat_username&#8217;]) ? sanitize_text_field($_POST[&#8216;simple_chat_username&#8217;]) : &#8221;;<br \/>$message = isset($_POST[&#8216;simple_chat_message&#8217;]) ? sanitize_textarea_field($_POST[&#8216;simple_chat_message&#8217;]) : &#8221;;<\/p>\n<p>if ($username === &#8221; || $message === &#8221;) {<br \/>return;<br \/>}<\/p>\n<p>$wpdb-&gt;insert(<br \/>$this-&gt;table_name,<br \/>array(<br \/>&#8216;username&#8217; =&gt; $username,<br \/>&#8216;message&#8217; =&gt; $message,<br \/>&#8216;created_at&#8217; =&gt; current_time(&#8216;mysql&#8217;),<br \/>),<br \/>array(&#8216;%s&#8217;, &#8216;%s&#8217;, &#8216;%s&#8217;)<br \/>);<\/p>\n<p>wp_safe_redirect(add_query_arg(&#8216;chat_sent&#8217;, &#8216;1&#8217;, wp_get_referer()));<br \/>exit;<br \/>}<\/p>\n<p>public function render_chat() {<br \/>global $wpdb;<\/p>\n<p>$messages = $wpdb-&gt;get_results(<br \/>&#8220;SELECT * FROM {$this-&gt;table_name} ORDER BY created_at DESC LIMIT 20&#8221;<br \/>);<\/p>\n<p>ob_start();<br \/>?&gt;<br \/>&lt;div class=&#8221;simple-chat-box&#8221; style=&#8221;max-width:600px;border:1px solid #ccc;padding:16px;border-radius:8px;&#8221;&gt;<br \/>&lt;h3&gt;Simpel chat&lt;\/h3&gt;<\/p>\n<p>&lt;?php if (isset($_GET[&#8216;chat_sent&#8217;])) : ?&gt;<br \/>&lt;p style=&#8221;color:green;&#8221;&gt;Besked sendt.&lt;\/p&gt;<br \/>&lt;?php endif; ?&gt;<\/p>\n<p>&lt;div class=&#8221;simple-chat-messages&#8221; style=&#8221;height:300px;overflow-y:auto;border:1px solid #ddd;padding:10px;margin-bottom:16px;background:#fafafa;&#8221;&gt;<br \/>&lt;?php if (!empty($messages)) : ?&gt;<br \/>&lt;?php foreach ($messages as $msg) : ?&gt;<br \/>&lt;div style=&#8221;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid #eee;&#8221;&gt;<br \/>&lt;strong&gt;&lt;?php echo esc_html($msg-&gt;username); ?&gt;&lt;\/strong&gt;<br \/>&lt;small style=&#8221;color:#666;&#8221;&gt;<br \/>(&lt;?php echo esc_html($msg-&gt;created_at); ?&gt;)<br \/>&lt;\/small&gt;<br \/>&lt;div&gt;&lt;?php echo nl2br(esc_html($msg-&gt;message)); ?&gt;&lt;\/div&gt;<br \/>&lt;\/div&gt;<br \/>&lt;?php endforeach; ?&gt;<br \/>&lt;?php else : ?&gt;<br \/>&lt;p&gt;Ingen beskeder endnu.&lt;\/p&gt;<br \/>&lt;?php endif; ?&gt;<br \/>&lt;\/div&gt;<\/p>\n<p>&lt;form method=&#8221;post&#8221;&gt;<br \/>&lt;?php wp_nonce_field(&#8216;simple_chat_send&#8217;, &#8216;simple_chat_nonce&#8217;); ?&gt;<\/p>\n<p>&lt;p&gt;<br \/>&lt;label for=&#8221;simple_chat_username&#8221;&gt;Navn&lt;\/label&gt;&lt;br&gt;<br \/>&lt;input type=&#8221;text&#8221; id=&#8221;simple_chat_username&#8221; name=&#8221;simple_chat_username&#8221; required style=&#8221;width:100%;padding:8px;&#8221;&gt;<br \/>&lt;\/p&gt;<\/p>\n<p>&lt;p&gt;<br \/>&lt;label for=&#8221;simple_chat_message&#8221;&gt;Besked&lt;\/label&gt;&lt;br&gt;<br \/>&lt;textarea id=&#8221;simple_chat_message&#8221; name=&#8221;simple_chat_message&#8221; required rows=&#8221;4&#8243; style=&#8221;width:100%;padding:8px;&#8221;&gt;&lt;\/textarea&gt;<br \/>&lt;\/p&gt;<\/p>\n<p>&lt;p&gt;<br \/>&lt;button type=&#8221;submit&#8221; name=&#8221;simple_chat_submit&#8221; value=&#8221;1&#8243;&gt;Send&lt;\/button&gt;<br \/>&lt;\/p&gt;<br \/>&lt;\/form&gt;<br \/>&lt;\/div&gt;<br \/>&lt;?php<br \/>return ob_get_clean();<br \/>}<br \/>}<\/p>\n<p>new Simple_Chat_Demo();<\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Her er koden til plugind &lt;?php\/*** Plugin Name: Simple Chat Demo* Description: Et simpelt chat-plugin med shortcode.* Version: 1.0.0* Author: Ulrik*\/ if (!defined(&#8216;ABSPATH&#8217;)) {exit;} class Simple_Chat_Demo {private $table_name; public function __construct() {global $wpdb;$this-&gt;table_name = $wpdb-&gt;prefix . &#8216;simple_chat_messages&#8217;; register_activation_hook(__FILE__, array($this, &#8216;activate&#8217;));add_shortcode(&#8216;simple_chat&#8217;, array($this, &#8216;render_chat&#8217;));add_action(&#8216;init&#8217;, array($this, &#8216;handle_form_submit&#8217;));} public function activate() {global $wpdb;$charset_collate = $wpdb-&gt;get_charset_collate(); $sql = &#8220;CREATE TABLE [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/comments?post=2"}],"version-history":[{"count":4,"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":11,"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/pages\/2\/revisions\/11"}],"wp:attachment":[{"href":"https:\/\/wp.10pro.dk\/index.php\/wp-json\/wp\/v2\/media?parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}