{"id":13759553,"url":"https://github.com/devgeniem/wp-readonly-options","last_synced_at":"2025-08-17T03:31:09.212Z","repository":{"id":56966597,"uuid":"65570430","full_name":"devgeniem/wp-readonly-options","owner":"devgeniem","description":"WordPress Plugin to set forced read-only options for get_option()","archived":false,"fork":false,"pushed_at":"2020-04-20T10:12:57.000Z","size":26,"stargazers_count":9,"open_issues_count":2,"forks_count":4,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-11-23T21:12:04.965Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devgeniem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-12T17:12:40.000Z","updated_at":"2021-01-13T08:28:58.000Z","dependencies_parsed_at":"2022-08-21T11:20:28.256Z","dependency_job_id":null,"html_url":"https://github.com/devgeniem/wp-readonly-options","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devgeniem%2Fwp-readonly-options","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devgeniem%2Fwp-readonly-options/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devgeniem%2Fwp-readonly-options/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devgeniem%2Fwp-readonly-options/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devgeniem","download_url":"https://codeload.github.com/devgeniem/wp-readonly-options/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230080776,"owners_count":18169619,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T13:00:55.300Z","updated_at":"2024-12-17T07:31:56.909Z","avatar_url":"https://github.com/devgeniem.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"![geniem-github-banner](https://cloud.githubusercontent.com/assets/5691777/14319886/9ae46166-fc1b-11e5-9630-d60aa3dc4f9e.png)\n# WP Plugin: Readonly Options\n[![Build Status](https://travis-ci.org/devgeniem/wp-readonly-options.svg?branch=master)](https://travis-ci.org/devgeniem/wp-readonly-options) [![Latest Stable Version](https://poser.pugx.org/devgeniem/wp-readonly-options/v/stable)](https://packagist.org/packages/devgeniem/wp-readonly-options) [![Total Downloads](https://poser.pugx.org/devgeniem/wp-readonly-options/downloads)](https://packagist.org/packages/devgeniem/wp-readonly-options) [![Latest Unstable Version](https://poser.pugx.org/devgeniem/wp-readonly-options/v/unstable)](https://packagist.org/packages/devgeniem/wp-readonly-options) [![License](https://poser.pugx.org/devgeniem/wp-readonly-options/license)](https://packagist.org/packages/devgeniem/wp-readonly-options)\n\nHave you ever wanted to set all your options as `define('PLUGIN_OPTION','some_value')` in `wp_config.php`?\n\nSometimes you need to use 3rd party plugins that only gives you those options in admin pages and GUI.\nAnd now you can't use git to version control your settings as you would love to do.\n\nThis plugin helps you to set all your settings in your code and doesn't force you to go over to admin pages.\n\n## How it works\nIt works by allowing you to force the results of `get_option()` to your predefined values.\n\nThis also adds tiny amount if javascript into admin pages so that it can set readonly attributes to your options: `\u003cinput readonly\u003e`.\nThis makes it easier for the users to understand that these options can't be changed.\n\nThis only works in `php7.0` version or better since we use arrays when defining constants. We also like to use scalar type hintings. Sorry legacy projects :(\n\n## Installation\nPrefered installation is with composer:\n\n```json\n{\n    \"require\": {\n        \"devgeniem/wp-readonly-options\": \"^1.1\"\n    },\n    \"extra\": {\n        \"installer-paths\": {\n          \"web/app/mu-plugins/{$name}/\": [\"type:wordpress-muplugin\"],\n        },\n    }\n}\n```\n\n## Code Example\n\nMy options page looks so empty and lonely:\n\n\u003cimg width=\"812\" alt=\"Before\" src=\"https://cloud.githubusercontent.com/assets/5691777/17637568/14e14110-60ed-11e6-867b-7f921d73fb02.png\"\u003e\n\nI'll look up the keys from `/wp-admin/options.php` and I see that they are `sm_bucket` and `sm_key_json`.\n\nYou can also see the names by using Google Chrome inspector. Key name is same as input element ID.\n\nI can use those keys with `WP_READONLY_OPTIONS` and I add the following code to my `wp-config.php`:\n\n**php7.0**\n```php\ndefine( 'WP_READONLY_OPTIONS', array(\n    'sm_bucket' =\u003e 'my-bucket.example.com'\n    'sm_key_json' =\u003e '{\n      \"type\": \"service_account\",\n      \"project_id\": \"XXXXXXXXXXXXXXXXXXXXXXX\",\n      \"private_key_id\": \"XXXXXXXXXXXXXXXXXXXX\",\n      \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n      -----END PRIVATE KEY-----\n    }'\n));\n```\n\n**php5.X**\n```php\ndefine( 'WP_READONLY_OPTIONS', serialize( array(\n    'sm_bucket' =\u003e 'my-bucket.example.com'\n    'sm_key_json' =\u003e '{\n      \"type\": \"service_account\",\n      \"project_id\": \"XXXXXXXXXXXXXXXXXXXXXXX\",\n      \"private_key_id\": \"XXXXXXXXXXXXXXXXXXXX\",\n      \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n      -----END PRIVATE KEY-----\n    }'\n)));\n```\n\n\nAfterwise I can see the values in readonly mode:\n\n\u003cimg width=\"806\" alt=\"After\" src=\"https://cloud.githubusercontent.com/assets/5691777/17637575/1c282f42-60ed-11e6-8622-7cff2466578b.png\"\u003e\n\n## Configuration\nDisables readonly attribute setter Javascript hack. It might be incompatible with something.\n```php\ndefine('WP_READONLY_OPTIONS_NO_JS',true);\n```\n\n## License\nGPLv2\n\n## Maintainers\n[@onnimonni](https://github.com/onnimonni)\n\n[@villepietarinen](https://github.com/villepietarinen)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevgeniem%2Fwp-readonly-options","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevgeniem%2Fwp-readonly-options","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevgeniem%2Fwp-readonly-options/lists"}