Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Antispam Bee 3 #506

Draft
wants to merge 191 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 147 commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
6d64a37
first draft of new 3.0 branch with the basic bootstrapping project an…
Mar 19, 2022
16a031f
wip 3.0: cloudfest hackathon
Mar 20, 2022
7e345cd
Merge branch '3.0-hackathon-pre' into 3.0-hackathon
Mar 20, 2022
1570572
ignore the tests folder
Mar 19, 2022
b97d7be
remove unnecessary JS dependencies
Mar 20, 2022
4a7510f
remove the languages folder for the wp_set_script_translations() func…
Mar 20, 2022
449c1f7
work on implementing the settings wrapper
Mar 20, 2022
b875026
change approved email and remove init from verifiable
Mar 20, 2022
d2e9650
add get_options to rules
Mar 20, 2022
2233052
First work on creating the rule classes (#444)
angcl Mar 20, 2022
1ffc917
implementing the "comment columns" class
Mar 20, 2022
5e9b463
Start of new admin pages
mahype Mar 20, 2022
2d711ed
Merge remote-tracking branch 'origin/3.0-hackathon' into 3.0-hackathon
mahype Mar 20, 2022
8e2243e
implement the helper to activate, deactivate and uninstall the plugin
2ndkauboy Mar 20, 2022
faf12e6
add post processors, rules, helpers
Mar 20, 2022
e9d0c0f
adding a todo for CommentsColumns
2ndkauboy Mar 20, 2022
2ff7da8
Merge branch '3.0-hackathon' into 3.0-hackathon
angcl Mar 20, 2022
732bd83
first working version of rules and postprocessors incl. honeypot (gen…
Mar 20, 2022
96de2f9
Merge branch '3.0-hackathon' of github.com:angelocali/antispam-bee in…
Mar 20, 2022
87f4a59
Merge remote-tracking branch 'origin/3.0-hackathon' into 3.0-hackathon
mahype Mar 21, 2022
d0401f9
implement an OptionsHelper to enable the plugin to work with the Anti…
2ndkauboy Mar 21, 2022
7159a90
add the get_key() function
2ndkauboy Mar 21, 2022
605fed7
do not optimize the table upon deletion of the antispam_bee option
2ndkauboy Mar 21, 2022
399afce
fixing some minor PHPCS issues
2ndkauboy Mar 21, 2022
293ee9b
further work on rules and postprocessors
Mar 21, 2022
3fb1d41
Merge branch '3.0-hackathon' of github.com:angelocali/antispam-bee in…
Mar 21, 2022
f46fb23
Removed Tab class
mahype Mar 21, 2022
e30101e
Fixed checkbox value
mahype Mar 21, 2022
d5b45d7
Added textarea
mahype Mar 21, 2022
75188d0
Merge branch '3.0-hackathon' into 3.0-hackathon
2ndkauboy Mar 21, 2022
c05c7fb
Merge pull request #446 from angelocali/3.0-hackathon
2ndkauboy Mar 21, 2022
bce5a37
add the OptionsPage class for the new UI
2ndkauboy Mar 21, 2022
114ddbc
add missing options function
2ndkauboy Mar 21, 2022
c9a3492
code style fixes (mostly whitespaces)
2ndkauboy Mar 21, 2022
cce02a0
move all files from inc of lib folder
2ndkauboy Mar 21, 2022
323a184
initialize all modules using their constructors, as they might be use…
2ndkauboy Mar 21, 2022
9a5c282
remove duplicate OptionsPage file (duplicate of SettingsPage)
2ndkauboy Mar 21, 2022
75b08e7
automated code style fixes (mostly whitespaces)
2ndkauboy Mar 21, 2022
2dea6da
remove unnecessary StatsHelpers
2ndkauboy Mar 21, 2022
cec36a7
remove duplicate OptionsHelper and move Settings class to Helpers
2ndkauboy Mar 21, 2022
5094b95
remove redundant files
Mar 23, 2022
6f89c72
fix docker-compose file for testing purposes
Mar 23, 2022
fea454e
fix composer.json
Mar 23, 2022
c861ea8
remove redundant code/files
Mar 26, 2022
18ac83c
work on tabs/sections/settings ...
Mar 30, 2022
4a1281c
add back honeypot regex comments
Apr 2, 2022
490e94c
update the min PHP version check to 5.6
Apr 2, 2022
5d189b2
add a check for php-xml to the bootstrapping process
Apr 2, 2022
e3e24d4
replace the anonymous callback function adding the rule to make it ea…
Apr 2, 2022
ea6c797
PHPCS security fixes
Apr 2, 2022
a6e477c
use sprintf for honeypot script markup
Apr 2, 2022
20e36ba
Merge remote-tracking branch 'origin/master' into 3.0-hackathon
Apr 2, 2022
c64aa83
PHPCS fixing issues in lib/Admin
Apr 2, 2022
0d39124
PHPCS fixing issues in lib/Fields
Apr 2, 2022
3f08c28
merge upstream 3.0-hackathon branch
Apr 7, 2022
af4f4ef
extract the honeypot inject to the init method of the rule
Apr 7, 2022
8532369
Work on settings
Apr 7, 2022
68573cd
Further work on settings and interfaces
Apr 14, 2022
285f4d5
Add PostProcessors, general settings, inline fields
Apr 14, 2022
7af8353
Work on Rules and PostProcessors
May 16, 2022
c315526
implement delete spam cronjob
Jun 27, 2022
28f9337
Ongoing work, now sanitization
florianbrinkmann Sep 5, 2022
7cf669b
Adding missing sanitization methods and little refactoring
florianbrinkmann Sep 19, 2022
d005f57
Latest changes
florianbrinkmann Oct 31, 2022
3dea140
Small refactoring
florianbrinkmann Nov 2, 2022
dd48ac9
Latest changes
florianbrinkmann Nov 14, 2022
08be6b8
Add todo
florianbrinkmann Nov 14, 2022
563d1fe
Move CommentsColumns.php to `Admin` folder
florianbrinkmann Jan 26, 2023
e9b73e7
Update todo comment
florianbrinkmann Jan 26, 2023
5d735dd
Add antispam_bee_rule_supported_types filter + docs
florianbrinkmann Jan 26, 2023
d46196a
Reorder classes in array
florianbrinkmann Jan 26, 2023
51b98b3
Overwrite timestamp in hidden field with JS so that it works with cac…
florianbrinkmann Jan 26, 2023
fe5409c
Remove todo comments from main file
florianbrinkmann Jan 26, 2023
2c75e23
Namespace constants
florianbrinkmann Jan 26, 2023
7edacd9
Fix broken label reference
florianbrinkmann Jan 26, 2023
60e36ae
Check for `valid_for` key of options before calling sanitization call…
florianbrinkmann Jan 26, 2023
5192d24
Code style fixes and first draft of migration
florianbrinkmann Feb 9, 2023
eb19d35
Move assets to `assets` folder and PHP files to `src`
florianbrinkmann Feb 9, 2023
c444a71
Use correct option name in Field.php
florianbrinkmann Feb 9, 2023
c0ba711
Merge readme.md files
florianbrinkmann Feb 9, 2023
7b70ebd
Option default values, build new options array
florianbrinkmann Feb 20, 2023
ab20bf9
Move sanitize methods from Settings to Sanitize class
florianbrinkmann Feb 20, 2023
5a1625e
Handle old reason slugs and remove unused methods
florianbrinkmann Feb 20, 2023
e803c02
Optimize imports, apply code style
florianbrinkmann Feb 20, 2023
7b113ba
Fix comment reason filter
florianbrinkmann Feb 20, 2023
fc3f0bf
Set more defaults
florianbrinkmann Feb 20, 2023
2df9f91
Also remove old option
florianbrinkmann Feb 22, 2023
a7c2869
Add reason for comments that are marked as spam manually
florianbrinkmann Feb 22, 2023
56c6f42
Use correct old reason name in mapping array
florianbrinkmann Feb 22, 2023
271cec0
Remove dashboard widget
florianbrinkmann Feb 24, 2023
e6b259f
Add current local spam count to at-a-glance-widget
florianbrinkmann Feb 24, 2023
3bbfb8a
Slightly adapt settings page markup
florianbrinkmann Feb 24, 2023
49e6d9c
Check for pings in the comment processing process
florianbrinkmann Feb 24, 2023
28bdcf1
Handle trackback request
florianbrinkmann Mar 6, 2023
e764a76
Rename trackback to linkback
florianbrinkmann Mar 6, 2023
a2b15d4
Use correct slug for linkback to myself rule
florianbrinkmann Mar 6, 2023
78d4324
Fix weird option things
florianbrinkmann Mar 6, 2023
12b7ba7
Various changes
florianbrinkmann Mar 6, 2023
4cc00e3
A few more changes
florianbrinkmann Mar 9, 2023
e5a3b12
Update alpha version number
florianbrinkmann Mar 14, 2023
27b323b
First work on docs
florianbrinkmann Mar 14, 2023
64d1975
More docs
florianbrinkmann Mar 16, 2023
28221ec
Improve docs
florianbrinkmann Mar 29, 2023
5aa26be
Add newlines
florianbrinkmann Mar 29, 2023
dfa62ca
work on a few to-dos and fix a few bugs
florianbrinkmann May 24, 2023
2939b22
Adjust a few spam rule scores
florianbrinkmann May 24, 2023
6561ebf
alpha.4
florianbrinkmann May 24, 2023
6c036a4
add check for latest plugin db version on fetching plugin options
florianbrinkmann May 24, 2023
22b8026
rename constants
florianbrinkmann May 24, 2023
800c2ab
remove unneeded UpdateSpamCount class
florianbrinkmann May 24, 2023
433107b
alpha 5
florianbrinkmann May 24, 2023
d45bbcb
Revert "remove unneeded UpdateSpamCount class"
florianbrinkmann Jun 2, 2023
06cb5c0
fix: convert `spam_count` to int before displaying, refs #500
florianbrinkmann Jun 2, 2023
bcd7cff
fix: don’t add `min` attribute to settings input if type number
florianbrinkmann Jun 2, 2023
308702c
fix: use `esc_html__` instead `esc_html`
florianbrinkmann Jun 2, 2023
e058830
fix: broken spam count mechanism
florianbrinkmann Jun 2, 2023
967f9b8
alpha.6
florianbrinkmann Jun 2, 2023
324fbc3
chore: add ISO codes link to country spam labels, refs #500
florianbrinkmann Jun 2, 2023
697133b
chore: move general reaction code from Comment to Reaction class
florianbrinkmann Jun 2, 2023
fba065b
fix: add check for AJAX and autosave from v2, refs #500
florianbrinkmann Jun 2, 2023
873c616
fix: remove `error_log` call
florianbrinkmann Jun 2, 2023
1b21b36
fix: add checks for empty linkbacks, refs #500
florianbrinkmann Jun 2, 2023
2492bea
fix: wrong returned spam score from LinkbackFromMyself check
florianbrinkmann Jun 2, 2023
8349b24
fix: add checks for empty IP on comment request and empty name/email …
florianbrinkmann Jun 2, 2023
f19fc4d
fix: add IP to `$linkback` array in `Linkback::process` method to mak…
florianbrinkmann Jun 2, 2023
2b1ebb8
alpha.7
florianbrinkmann Jun 2, 2023
1d963a6
chore: add missing option migrations, WIP, not tested
florianbrinkmann Jun 3, 2023
7949ab5
fix: warning if `label_kses` is not defined for field label
florianbrinkmann Jun 3, 2023
b3ead8d
fix: use correct slug for LinkbackPostTitleIsBlogName rule
florianbrinkmann Jun 3, 2023
ef81320
chore: hopefully completly working option migration
florianbrinkmann Jun 3, 2023
736684b
alpha.8
florianbrinkmann Jun 3, 2023
9022dba
chore: finish update migration logic
florianbrinkmann Jun 5, 2023
65eeb36
feat: add possiblity to set rule to invisible
florianbrinkmann Jun 10, 2023
0c7477b
chore: rename `content_type` to `reaction_type`
florianbrinkmann Jun 12, 2023
9b2ab90
add todo comment
florianbrinkmann Jul 4, 2023
3581491
improve method to get IP address
florianbrinkmann Jul 4, 2023
52c0eca
undo change in IP check
florianbrinkmann Jul 13, 2023
f156feb
adjust dashboard label, refs #510
florianbrinkmann Jul 13, 2023
9025834
don’t remove the `antispam_bee` option on uninstall for now, refs #511
florianbrinkmann Jul 13, 2023
d9a7576
add multisite uninstall routine, refs #512
florianbrinkmann Jul 13, 2023
509865b
alpha 9
florianbrinkmann Jul 13, 2023
9d792f5
fix uninstall routine
florianbrinkmann Jul 13, 2023
c3f760b
first changes to readme and changelog files
florianbrinkmann Jul 16, 2023
7a1e0ed
fix: add manually marked reason again
florianbrinkmann Jul 23, 2023
fbe140e
fix: don’t run migration if no db version
florianbrinkmann Oct 18, 2023
2d5c21e
chore: mark old ASB rules as »legacy« in spam reason select instead o…
florianbrinkmann Oct 18, 2023
2568bdd
chore: add additional regex
florianbrinkmann Oct 18, 2023
12d1e89
chore: introduce `is_doing_autosave` var in load.php
florianbrinkmann Dec 15, 2023
0b4f8e7
chore: move threshold filters in `Rules.php` before the loop and the …
florianbrinkmann Dec 15, 2023
adb250e
chore: add debug logging to rules handling and honeypot precheck
florianbrinkmann Dec 15, 2023
2a95a5e
chore: don’t log sensitive info
florianbrinkmann Dec 15, 2023
a36a5fe
fix: don’t log email in honeypot debug message
florianbrinkmann Dec 15, 2023
5275504
fix: remove script/style things from composer.json
florianbrinkmann Dec 15, 2023
8236426
chore: mark $_POST data missing the honeypot field as spam
florianbrinkmann Dec 16, 2023
23fcbc3
chore: update version number for alpha 11
florianbrinkmann Dec 16, 2023
9214d9f
fix: wrong parameters and array key around ContentTypeHelper::reactio…
florianbrinkmann Dec 17, 2023
3045484
chore: add EmptyData rule and remove double check for linkback title
florianbrinkmann Dec 17, 2023
5c4ac9f
fix: update class comment for EmptyData
florianbrinkmann Dec 17, 2023
b63b49c
fix: name and reason for EmptyData
florianbrinkmann Dec 17, 2023
267297c
feat: add InvalidRequest rule
florianbrinkmann Dec 17, 2023
b904f85
fix: add InvalidRequest rule to load.php
florianbrinkmann Dec 17, 2023
645dde6
chore: add time to log message and remove prefix
florianbrinkmann Dec 17, 2023
490cbd3
fix: issues from alpha.10 preventing valid comments
florianbrinkmann Dec 17, 2023
b7ba7a6
chore: update version number
florianbrinkmann Dec 17, 2023
65b1c1f
fix: check for `ab_spam__invalid_request` in `$_POST`
florianbrinkmann Jan 22, 2024
e475355
chore: alpha.13
florianbrinkmann Feb 3, 2024
bca8a41
Better comment type handling (#565)
MatzeKitt Feb 4, 2024
865b312
chore: alpha.14
florianbrinkmann Feb 4, 2024
b23400d
chore: use `3.0.0.alpha.1` for comparision if db migration needs to b…
florianbrinkmann Feb 9, 2024
ad28b52
chore: update version for alpha.15
florianbrinkmann Feb 9, 2024
7f569ef
fix: use `3.0.0-alpha.1` instead `3.0.0.alpha.1` in PluginUpdater
florianbrinkmann Feb 9, 2024
83249d8
chore: remove unused PHP 5.4 dependencies
stklcode Mar 17, 2024
7fbe5d6
chore: remove unused Node dependencies
stklcode Mar 17, 2024
27de7b6
chore: fix code-style pipeline
stklcode Mar 17, 2024
e1a7c89
style: auto-fix some space, newline and indentation issues
stklcode Mar 17, 2024
e5c4ebe
fix: add missing default return value to EmptyData rule
stklcode Mar 17, 2024
a349b03
fix: default tab assignment in sanitize_options
stklcode Mar 17, 2024
3006c43
fix: use of sprintf( esc_html_x () ) in SpamReasonTextHelper
stklcode Mar 17, 2024
c85b6cd
fix: return value for empty values in SaveReason and UpdateSpamLog
stklcode Mar 17, 2024
4c03a43
docs: extend PHPDocs and fix some minor code style issues
stklcode Mar 17, 2024
260756e
chore: display PHPCS warnings, but do not fail CI
stklcode Mar 18, 2024
cb9046e
test: update test frameworks and restore unit tests in CI
stklcode Mar 17, 2024
fb0cc05
fix: use correct variable to read linkback URL
stklcode Mar 18, 2024
d7bcaca
fix: translation for label and description of DeleteOldSpam
stklcode Mar 17, 2024
f9858e7
chore: raise required PHP version from 7.0 to 7.2
stklcode Mar 23, 2024
64cb846
refactor: add type hints to GenericOptions, PostProcessors and Rules
stklcode Mar 18, 2024
e95b471
refactor: add type hints to Admin, Cron, Handlers and Helpers
stklcode Mar 23, 2024
51ab544
fix: add missing return statement to Linkback::process()
stklcode Mar 24, 2024
032ad82
fix: ensure $implements_interfaces is initialized in ComponentHelper
stklcode Mar 24, 2024
59fc283
refactor: use null-coalesce operator where applicable
stklcode Mar 24, 2024
dc406b3
refactor: remove superfluous type checks
stklcode Mar 24, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# This file is for unifying the coding style for different editors and IDEs
# editorconfig.org

# WordPress Coding Standards
# https://make.wordpress.org/core/handbook/coding-standards/

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = tab
indent_size = 4

[{.jshintrc,*.json,*.yml}]
indent_style = space
indent_size = 2

[{*.txt,wp-config-sample.php}]
end_of_line = crlf
20 changes: 20 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"extends": [
"plugin:@wordpress/eslint-plugin/recommended"
],
"env": {
"browser": true
},
"rules": {
"max-len": [
"error",
{
"code": 160
}
],
"prettier/prettier": 0
},
"parserOptions": {
"requireConfigFile": false
}
}
21 changes: 0 additions & 21 deletions .eslintrc.json

This file was deleted.

6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
css/*.min.css
js/*.min.js
assets/dist
.idea/
build/
node_modules/
tmp/
vendor/
chromedriver
composer.lock
driver.tar.gz
driver.zip
geckodrier
nohup.out
package-lock.json
yarn.lock
6 changes: 0 additions & 6 deletions .stylelintrc.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
{
"extends": "@wordpress/stylelint-config",
"rules": {
"declaration-property-unit-allowed-list": null,
"font-weight-notation": null,
"font-family-no-missing-generic-family-keyword": null,
"no-descending-specificity": null,
"selector-class-pattern": null,
"selector-id-pattern": null
}
}
50 changes: 50 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,55 @@
## Changelog ##

### 3.0.0 – WIP ###
* **English**
* Complete code rewrite and backend UI overhaul
* Allows to extend Antispam Bee with own rules
* Allows to use Antispam Bee rules for other reactions than comments, for example, forms

* **Deutsch**
* Kompletter Code-Rewrite und Überarbeitung des Backend-User-Interfaces
* Möglichkeit der Erweiterung von Antispam Bee um eigene Spam-Regeln
* Erlaubt die Nutzung von Antispam Bee für andere Reaktionen als Kommentare, beispielsweise Formulare

### 2.11.3 ###
* **English**
* Fix: Multiselect for "Delete comments by spam reasons" was not saving values
* Fix: Fix broken link for ISO country codes
* Maintenance: Added test for PHP 8.2
* Maintenance: Tested up to WordPress 6.2

* **Deutsch**
* Behoben: Multiselect für "Kommentare aus Spamgründen löschen" speicherte keine Werte
* Fix: Fehlerhafter Link für ISO-Ländercodes behoben
* Wartung: Test für PHP 8.2 hinzugefügt
* Wartung: Getestet mit WordPress 6.2

### 2.11.2 ###
* **English**
* Tweak: remove superfluous translations
* Tweak: make FAQ link an anchor link
* Fix: spam counter no longer raises a warning with PHP 8.1 if no spam is present yet
* Fix: spam reasons are now localized correctly
* Fix: Translations were loaded twice on some admin pages
* Maintenance: Tested up to WordPress 6.1

* **Deutsch**
* Tweak: Überflüssige Übersetzungen entfernt
* Tweak: Link zu den FAQ ist jetzt ein Anker-Link
* Fix: Der Spam-Zähler erzeugt mit PHP 8.1 keine Warnung mehr, wenn noch kein Spam vorhanden ist
* Fix: Spam-Gründe werden nun korrekt übersetzt
* Fix: Übersetzungen wurden auf einzelnen Adminseiten doppelt geladen
* Wartung: Getestet mit WordPress 6.1

### 2.11.1 ###
* **English**
* Tweak: remove superfluous type attribute from inline script tag
* Maintenance: Tested up to WordPress 6.0

* **Deutsch**
* Tweak: Überflüssiges type-Attribut von script-Tag entfernt
* Wartung: Getestet mit WordPress 6.0

### 2.11.0 ###
* **English**
* Fix: Allow empty comments if `allow_empty_comment` is set to true
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

[![Build status](https://github.com/pluginkollektiv/antispam-bee/actions/workflows/tests.yml/badge.svg)](https://github.com/pluginkollektiv/antispam-bee/actions/workflows/tests.yml) [![Current Antispam Bee version](https://img.shields.io/wordpress/plugin/v/antispam-bee.svg)](https://wordpress.org/plugins/antispam-bee/) [![Number of downloads](https://img.shields.io/wordpress/plugin/dt/antispam-bee.svg)](https://wordpress.org/plugins/antispam-bee/advanced/) [![Number of active installs](https://img.shields.io/wordpress/plugin/installs/antispam-bee.svg)](https://wordpress.org/plugins/antispam-bee/advanced/) [![WordPress plugin rating](https://img.shields.io/wordpress/plugin/r/antispam-bee.svg)](https://wordpress.org/plugins/antispam-bee/#reviews) [![Donate with PayPal](https://img.shields.io/badge/PayPal-Donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=TD4AMD2D8EMZW)

Antispam plugin with a sophisticated toolset for effective day to day comment and trackback spam-fighting. Built with data protection and privacy in mind.
Antispam plugin with a sophisticated toolset for effective day to day comment and linkback spam-fighting. Built with data protection and privacy in mind, and extendable with own anti-spam rules and possibility to use Antispam Bee rules for other reactions than comments and linkbacks.

## Description ##
Say Goodbye to comment spam on your WordPress blog or website. *Antispam Bee* blocks spam comments and trackbacks effectively and without captchas. It is free of charge, ad-free and compliant with European data privacy standards.
Say Goodbye to comment spam on your WordPress blog or website. *Antispam Bee* blocks spam comments and linkbacks effectively and without captchas. It is free of charge, ad-free and compliant with European data privacy standards.

### Feature/Settings Overview ###
* Trust approved commenters.
Expand Down Expand Up @@ -45,7 +45,7 @@ Say Goodbye to comment spam on your WordPress blog or website. *Antispam Bee* bl
* If you don’t know how to install a plugin for WordPress, [here’s how](http://codex.wordpress.org/Managing_Plugins#Installing_Plugins).

### Requirements ###
* PHP 5.2.4 or greater
* PHP 7.0 or greater
* WordPress 4.5 or greater

### Settings ###
Expand Down
Loading
Loading