{"id":14746,"date":"2013-09-16T09:00:45","date_gmt":"2013-09-16T09:00:45","guid":{"rendered":"http:\/\/www.adviceinteractivegroup.com\/?p=8531"},"modified":"2013-09-16T09:00:45","modified_gmt":"2013-09-16T09:00:45","slug":"open-source-wordpress-options-page-plugin","status":"publish","type":"post","link":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/","title":{"rendered":"Open Source WordPress Options Page Plugin"},"content":{"rendered":"<p><!--WordPress Options Page Plugin--><\/p>\n<h1>WordPress Options Page Plugin Tutorial<\/h1>\n<p>I use option pages quite a bit when doing WordPress development. So much so that I created an <strong>open source WordPress plugin<\/strong> and would like to share it with you. You can download the <a href=\"https:\/\/github.com\/ataylorme\/\" target=\"_blank\" rel=\"noopener\">source files<\/a> or view the project on <a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n<p><strong>Note:<\/strong> this tutorial and plugin assumes that you are comfortable with the WordPress API and editing PHP files.<\/p>\n<h2>Downloading The Plugin<\/h2>\n<ul>\n<li>After you download the zip file, go ahead and extract it.<\/li>\n<li>Rename the directory from &#8220;wordpress-options-plugin-master&#8221; to something more useful &#8211; like the name of your plugin. For this example, I will use &#8220;super-awesome-plugin.&#8221;<\/li>\n<li>Copy the plugin directory you just renamed to the <code>wp_content\/plugins<\/code> directory of your WordPress installation.<\/li>\n<li>Open the plugin directory.<\/li>\n<\/ul>\n<h2>Getting Familiar With The Plugin Layout<\/h2>\n<p>There are 3 .php files in the plugin directory.<\/p>\n<p>&#8220;my-plugin.php&#8221; is the main plugin file (which you will rename later) that defines the plugin name for WordPress, sets up some PHP definitions for use in the other files, and requires the other files.<\/p>\n<p>The other PHP files have their code wrapped in a class. I did this mostly for namespacing. You will likely want to update the class names.<\/p>\n<p>&#8220;admin-options.php&#8221; is the class that creates the options page for the WordPress dashboard.<\/p>\n<p>&#8220;admin-input-fields.php&#8221; contains a class with methods to create input fields for use in &#8220;admin-options.php&#8221;.<\/p>\n<p><strong>Note:<\/strong> If you updated the class names, you will also need to update them in the <code>require_once()<\/code> functions to avoid errors. These can be found in &#8220;my-plugin.php&#8221; on lines 21 and 24 and in &#8220;admin-options.php&#8221; on line 3.<\/p>\n<h2>Some Configuration Required<\/h2>\n<p>Edit &#8220;my-plugin.php&#8221; and update the values for <code>Plugin Name: <\/code>, <code>Author: <\/code>, <code>MY_PLUGIN_NAME<\/code>, <code>MY_PLUGIN_PREFIX<\/code>, and <code>MY_PLUGIN_OPTIONS<\/code> to reflect your plugins name. Following along with my example of &#8220;Super Awesome Plugin&#8221; the updated code would look like this:<\/p>\n<p>[code language=&#8221;php&#8221;]<br \/>\n\/*<br \/>\nPlugin Name: Super Awesome Plugin<br \/>\nAuthor: Andrew Taylor<br \/>\nVersion: 1.0<br \/>\n*\/<\/p>\n<p>\/* DEFINE PLUGIN NAMESPACES *\/<br \/>\n\/\/display name for end user<br \/>\ndefine(&#8216;MY_PLUGIN_NAME&#8217;, &#8216;Super Awesome Plugin&#8217;);<br \/>\n\/\/prefix for reuse<br \/>\ndefine(&#8216;MY_PLUGIN_PREFIX&#8217;, &#8216;super_awesome_plugin_&#8217;);<br \/>\n\/\/name of options stored in WordPress DB<br \/>\ndefine(&#8216;MY_PLUGIN_OPTIONS&#8217;, &#8216;_super_awesome_plugin_options&#8217;);<br \/>\n[\/code]<\/p>\n<p>Rename &#8220;my-plugin.php&#8221; to also reflect your plugins name. For this example it would be &#8220;&#8221;super-aweome-plugin.php&#8221;<\/p>\n<h2>Setting Up Option Fields<\/h2>\n<p>Open up &#8220;admin-options.php&#8221; and look at line 66. Inside of <code>&lt;tbody&gt;&lt;\/tbody&gt;<\/code> is where the inputs for the options page are defined.<\/p>\n<p>The available input methods and examples are listed below. All of them require a string passed for <code>$slug<\/code>. The slug will be the key used for the input in the options array and should be a unique value. Try to make these lowercase and use underscores instead of spaces. For example <code>'first_name'<\/code><code>$label<\/code> is an optional string for the field label on the options page. If it is not set or passed as false, then the <code>$slug<\/code> will be used to generate the label. <code>$description<\/code> is an optional string that will be placed underneath the input to give the user some extra guidance. If omitted or passed as false, no description will be displayed. If an input methods accepts an argument of <code>$options,<\/code> it is required and should be an array of label\/slug pairs. The label and slug can be the same or different.<\/p>\n<p>Here are the examples from &#8220;admin-options.php&#8221;. You will need to replace these with your own set of options.<\/p>\n<p>[code language=&#8221;php&#8221;]<br \/>\n\/\/$admin_input_fields-&gt;text($slug=false, $label=false, $description=false);<br \/>\n$admin_input_fields-&gt;text(&#8216;user_name&#8217;);<br \/>\n$admin_input_fields-&gt;text(&#8216;phone_number&#8217;, false, &#8217;10 Digit Phone Number in the format of 123-456-7890&#8242;);<br \/>\n$admin_input_fields-&gt;text(&#8216;favorite_website&#8217;, &#8216;Favorite Website&#8217;, &#8216;Full URL &#8211; including http:\/\/ and www.&#8217;);<\/p>\n<p>\/\/$admin_input_fields-&gt;textarea($slug=false, $label=false, $description=false);<br \/>\n$admin_input_fields-&gt;textarea(&#8216;user_profile&#8217;, false, &#8216;A little bit about you&#8217;);<\/p>\n<p>\/\/$admin_input_fields-&gt;checkbox($slug=false, $label=false, $description=false);<br \/>\n$admin_input_fields-&gt;checkbox(&#8216;understands_binary&#8217;, &#8216;Do you understand binary?&#8217;, &#8216;There will be a test later!&#8217;);<\/p>\n<p>\/\/$admin_input_fields-&gt;page_select($slug=false, $label=false, $description=false);<br \/>\n$admin_input_fields-&gt;page_select(&#8216;user_page&#8217;, &#8216;Your Page&#8217;);<\/p>\n<p>\/\/$admin_input_fields-&gt;select($slug=false, $options=false, $label=false, $description=false);<br \/>\n$admin_input_fields-&gt;select(&#8216;like_sriracha&#8217;, array(&#8216;No&#8217; =&gt; &#8216;No&#8217;, &#8216;Yes&#8217; =&gt; &#8216;Yes&#8217;, &#8216;I put Sriracha on everything!&#8217; =&gt; &#8216;I put Sriracha on everything!&#8217;), &#8216;Do you like &lt;a href=&#8221;http:\/\/www.huyfong.com\/no_frames\/sriracha.htm&#8221; target=&#8221;_blank&#8221;&gt;Sriracha&lt;\/a&gt;?&#8217;);<\/p>\n<p>\/\/$admin_input_fields-&gt;radio($slug=false, $options=false, $label=false, $description=false)<br \/>\n$admin_input_fields-&gt;radio(&#8216;pancakes_waffles&#8217;, array(&#8216;Pancakes&#8217; =&gt; &#8216;Pancakes&#8217;, &#8216;Waffles&#8217; =&gt; &#8216;Waffles&#8217;, &#8216;Both&#8217; =&gt; &#8216;Pancakes and Waffles&#8217;, &#8216;Neither&#8217; =&gt; &#8216;Neither&#8217;), &#8216;Do you prefer pancakes or waffles?&#8217;, &#8216;Be honest&#8230;&#8217;);<br \/>\n[\/code]<\/p>\n<h2>Testing<\/h2>\n<p>Go into the WordPress dashboard, activate your plugin, and head to the options page. Fill out some values and hit &#8220;Save Changes&#8221;.<\/p>\n<h2>Using Saved Options<\/h2>\n<p>The options are stored in a single array in the database. In order to use the options either in this plugin or a theme, you will need to get the array from the database using <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/\" target=\"_blank\" rel=\"noopener\">get_option()<\/a>. It is also a good idea to check to make sure the value is set and not blank before displaying it. Here is an example of how you would retrieve and display &#8220;phone_number&#8221;<\/p>\n<p>[code language=&#8221;php&#8221;]<br \/>\n&lt;?php<br \/>\n\/\/Get options from database<br \/>\n$my_plugin_options = get_option(MY_PLUGIN_OPTIONS);<br \/>\n\/\/Display phone_number if it is set and is not empty<br \/>\nif( isset($my_plugin_options[&#8216;phone_number&#8217;]) AND !empty($my_plugin_options[&#8216;phone_number&#8217;]) ){<br \/>\necho $my_plugin_options[&#8216;phone_number&#8217;];<br \/>\n}?&gt;<br \/>\n[\/code]<\/p>\n<p>The included file &#8220;shortcodes.php&#8221; has examples of retrieving the example options for use as WordPress shortcodes, but you certainly are not limited to shortcodes. I often use options to allow users to enter a phone number, social media urls, or other customizations.<\/p>\n<h2>Conclusion<\/h2>\n<p>This tutorial is pretty brief and assumes you know your way around WordPress. If you run into issues, use this on a project, or have general feedback, feel free to leave a comment.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress Options Page Plugin Tutorial I use option pages quite a bit when doing WordPress development. So much so that [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[17],"tags":[],"class_list":["post-14746","post","type-post","status-publish","format-standard","hentry","category-web-development-design"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Open Source WordPress Options Page Plugin | Advice Local<\/title>\n<meta name=\"description\" content=\"Learn how to implement our free, open-source WordPress options page plugin in this detailed tutorial.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Open Source WordPress Options Page Plugin | Advice Local\" \/>\n<meta property=\"og:description\" content=\"Learn how to implement our free, open-source WordPress options page plugin in this detailed tutorial.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/\" \/>\n<meta property=\"og:site_name\" content=\"Advice Local\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/advicelocallistings\/\" \/>\n<meta property=\"article:published_time\" content=\"2013-09-16T09:00:45+00:00\" \/>\n<meta name=\"author\" content=\"Bernadette Coleman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Open Source WordPress Options Page Plugin | Advice Local\" \/>\n<meta name=\"twitter:creator\" content=\"@advice_local\" \/>\n<meta name=\"twitter:site\" content=\"@advice_local\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bernadette Coleman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/\"},\"author\":{\"name\":\"Bernadette Coleman\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#\\\/schema\\\/person\\\/2db3c5de76eb330f52a29fb4fafa1dbd\"},\"headline\":\"Open Source WordPress Options Page Plugin\",\"datePublished\":\"2013-09-16T09:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/\"},\"wordCount\":1007,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#organization\"},\"articleSection\":[\"Web Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/\",\"url\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/\",\"name\":\"Open Source WordPress Options Page Plugin | Advice Local\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#website\"},\"datePublished\":\"2013-09-16T09:00:45+00:00\",\"description\":\"Learn how to implement our free, open-source WordPress options page plugin in this detailed tutorial.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/open-source-wordpress-options-page-plugin\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open Source WordPress Options Page Plugin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/\",\"name\":\"Advice Local\",\"description\":\"Local Digital Marketing Software Solutions and Services\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#organization\",\"name\":\"Advice Local\",\"url\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/logo.png\",\"width\":265,\"height\":55,\"caption\":\"Advice Local\"},\"image\":{\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/advicelocallistings\\\/\",\"https:\\\/\\\/x.com\\\/advice_local\",\"https:\\\/\\\/www.instagram.com\\\/advice_local\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/#\\\/schema\\\/person\\\/2db3c5de76eb330f52a29fb4fafa1dbd\",\"name\":\"Bernadette Coleman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bea94b8cbcbd36b9a98c360befad5e3ea7268fe4d99960115ddc5eb69df6fb61?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bea94b8cbcbd36b9a98c360befad5e3ea7268fe4d99960115ddc5eb69df6fb61?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bea94b8cbcbd36b9a98c360befad5e3ea7268fe4d99960115ddc5eb69df6fb61?s=96&d=mm&r=g\",\"caption\":\"Bernadette Coleman\"},\"url\":\"https:\\\/\\\/www.advicelocal.com\\\/blog\\\/author\\\/bernadette-coleman\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Open Source WordPress Options Page Plugin | Advice Local","description":"Learn how to implement our free, open-source WordPress options page plugin in this detailed tutorial.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/","og_locale":"en_US","og_type":"article","og_title":"Open Source WordPress Options Page Plugin | Advice Local","og_description":"Learn how to implement our free, open-source WordPress options page plugin in this detailed tutorial.","og_url":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/","og_site_name":"Advice Local","article_publisher":"https:\/\/www.facebook.com\/advicelocallistings\/","article_published_time":"2013-09-16T09:00:45+00:00","author":"Bernadette Coleman","twitter_card":"summary_large_image","twitter_title":"Open Source WordPress Options Page Plugin | Advice Local","twitter_creator":"@advice_local","twitter_site":"@advice_local","twitter_misc":{"Written by":"Bernadette Coleman","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/#article","isPartOf":{"@id":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/"},"author":{"name":"Bernadette Coleman","@id":"https:\/\/www.advicelocal.com\/blog\/#\/schema\/person\/2db3c5de76eb330f52a29fb4fafa1dbd"},"headline":"Open Source WordPress Options Page Plugin","datePublished":"2013-09-16T09:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/"},"wordCount":1007,"commentCount":0,"publisher":{"@id":"https:\/\/www.advicelocal.com\/blog\/#organization"},"articleSection":["Web Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/","url":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/","name":"Open Source WordPress Options Page Plugin | Advice Local","isPartOf":{"@id":"https:\/\/www.advicelocal.com\/blog\/#website"},"datePublished":"2013-09-16T09:00:45+00:00","description":"Learn how to implement our free, open-source WordPress options page plugin in this detailed tutorial.","breadcrumb":{"@id":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.advicelocal.com\/blog\/open-source-wordpress-options-page-plugin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.advicelocal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Open Source WordPress Options Page Plugin"}]},{"@type":"WebSite","@id":"https:\/\/www.advicelocal.com\/blog\/#website","url":"https:\/\/www.advicelocal.com\/blog\/","name":"Advice Local","description":"Local Digital Marketing Software Solutions and Services","publisher":{"@id":"https:\/\/www.advicelocal.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.advicelocal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.advicelocal.com\/blog\/#organization","name":"Advice Local","url":"https:\/\/www.advicelocal.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.advicelocal.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.advicelocal.com\/blog\/wp-content\/uploads\/2026\/04\/logo.png","contentUrl":"https:\/\/www.advicelocal.com\/blog\/wp-content\/uploads\/2026\/04\/logo.png","width":265,"height":55,"caption":"Advice Local"},"image":{"@id":"https:\/\/www.advicelocal.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/advicelocallistings\/","https:\/\/x.com\/advice_local","https:\/\/www.instagram.com\/advice_local"]},{"@type":"Person","@id":"https:\/\/www.advicelocal.com\/blog\/#\/schema\/person\/2db3c5de76eb330f52a29fb4fafa1dbd","name":"Bernadette Coleman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/bea94b8cbcbd36b9a98c360befad5e3ea7268fe4d99960115ddc5eb69df6fb61?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bea94b8cbcbd36b9a98c360befad5e3ea7268fe4d99960115ddc5eb69df6fb61?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bea94b8cbcbd36b9a98c360befad5e3ea7268fe4d99960115ddc5eb69df6fb61?s=96&d=mm&r=g","caption":"Bernadette Coleman"},"url":"https:\/\/www.advicelocal.com\/blog\/author\/bernadette-coleman\/"}]}},"_links":{"self":[{"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/posts\/14746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/comments?post=14746"}],"version-history":[{"count":0,"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/posts\/14746\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/media?parent=14746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/categories?post=14746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.advicelocal.com\/blog\/wp-json\/wp\/v2\/tags?post=14746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}