Plugin Directory

Changeset 3747070


Ignore:
Timestamp:
10/14/2026 08:02:34 PM (7 days ago)
Author:
hivepress
Message:

Release 1.8.0

Location:
hivepress
Files:
1181 added
63 edited

Legend:

Unmodified
Added
Removed
  • hivepress/trunk/assets/css/common-rtl.min.css

    r3732142 r3747070  
    1 .hp-icon{font-size:16px}.hp-icon--rtl{transform:scaleX(-1)}.hp-link{display:inline-flex;align-items:center;text-decoration:none}.hp-link:not(span){cursor:pointer}.hp-link:not(:hover){color:inherit}.hp-link i:first-child{margin-left:.5rem}.hp-link:last-child i:only-child{margin-left:0}.hp-link--wrap{display:block}.hp-link--wrap i{vertical-align:middle;margin-top:-.125em}.hp-text--secondary{color:rgba(0,0,0,.5)}.hp-status span{display:inline-block;border:1px solid rgba(0,0,0,.06);padding:.4rem .5rem;white-space:nowrap;line-height:1;font-size:80%}.hp-status--draft span,.hp-status--trash span,.hp-status--wc-refunded span{color:#ff3860;border-color:#ff3860}.hp-status--pending span,.hp-status--wc-on-hold span,.hp-status--wc-processing span{color:#ffcb00;border-color:#ffcb00}.hp-status--publish span,.hp-status--wc-completed span{color:#15cd72;border-color:#15cd72}.hp-block[data-state=loading],.hp-form[data-state=loading]{position:relative;opacity:.5}.hp-block[data-state=loading]::after,.hp-form[data-state=loading]::after{content:'';display:block;position:absolute;right:0;top:0;left:0;bottom:0;z-index:1000}.hp-form--narrow{width:100%}.hp-form__description:not(:last-child),.hp-form__messages:not(:last-child){margin-bottom:1rem}.hp-form>.hp-form__messages:not(:last-child){margin-bottom:1.5rem}.hp-form__messages{display:none;border-right:3px solid transparent;background-color:rgba(0,0,0,.04);padding:1rem 1.5rem}.hp-form__messages--info{border-right-color:#00a0d2}.hp-form__messages--warning{border-right-color:#ffb900}.hp-form__messages--error{border-right-color:#dc3232}.hp-form__messages--success{border-right-color:#46b450}.hp-form__messages>div:not(:last-child){margin-bottom:.5rem}.hp-form__fields:not(:last-child),.hp-form__footer:not(:last-child){margin-bottom:2rem}.hp-form__header:not(:last-child){margin-bottom:1.5rem}.hp-form__actions,.hp-form__footer{display:flex;align-items:center}.hp-form__footer{justify-content:space-between}.hp-form--narrow .hp-form__button{width:100%}.hp-form--narrow .hp-form__button:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form__button{width:100%}.hp-form__button:not(:last-child){margin-bottom:1rem}}.hp-form--narrow .hp-form__actions,.hp-form--narrow .hp-form__footer{flex-direction:column}@media only screen and (max-width:47.99em){.hp-form__actions,.hp-form__footer{flex-direction:column}}.hp-form__field:not(:last-child){margin-bottom:1.5rem}.hp-form__field--hidden{display:none}.hp-form__action:not(:last-child){margin-left:1.5rem}.hp-form--narrow .hp-form__action{text-align:center}.hp-form--narrow .hp-form__action:not(:last-child){margin:0 0 .5rem}@media only screen and (max-width:47.99em){.hp-form__action:not(:last-child){margin:0 0 .5rem}}.hp-form--narrow button.hp-form__action:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form button.hp-form__action:not(:last-child){margin-bottom:1rem}}.hp-modal .hp-form{width:100%}.hp-modal .hp-form:not(:last-child){margin-bottom:0}.hp-modal .hp-form__button{width:100%}.hp-modal .hp-form__button:not(:last-child){margin-bottom:1rem}.hp-modal .hp-form__actions,.hp-modal .hp-form__footer{flex-direction:column}.hp-modal .hp-form__action:not(:last-child){margin:0 0 .5rem}button.hp-modal .hp-form__action:not(:last-child){margin-bottom:1rem}.hp-field--hidden{display:none}.hp-field--email,.hp-field--number,.hp-field--password,.hp-field--search,.hp-field--select,.hp-field--text,.hp-field--textarea,.hp-field--url{width:100%;min-width:1px}.hp-field--email,.hp-field--password,.hp-field--url{direction:ltr}.hp-field--textarea{max-width:100%;min-height:8rem}input[type=color].hp-field--color{appearance:none;-webkit-appearance:none;width:40px;height:40px;padding:0;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer;background:0 0}input[type=color].hp-field--color::-webkit-color-swatch-wrapper{padding:0}input[type=color].hp-field--color::-webkit-color-swatch{border:none;border-radius:2px}input[type=color].hp-field--color::-moz-color-swatch{border:none;border-radius:2px}.hp-field--attachment-upload::after{display:table;clear:both;content:''}.hp-field--attachment-upload label{position:relative;float:right;overflow:hidden;margin:0!important;width:auto!important}.hp-field--attachment-upload input[type=file]{font-size:200px!important;position:absolute;top:0;left:0;margin:0;cursor:pointer;opacity:0;direction:rtl}.hp-field--attachment-upload>div:first-child:not(:empty){margin-bottom:-2rem;padding-bottom:1rem}.hp-field--attachment-upload>div:first-child>div{position:relative;margin-bottom:2rem}.hp-field--attachment-upload>div:first-child>div img{display:block;width:100%;height:auto}.hp-field--attachment-upload>div:first-child>div:not(:only-child) img{cursor:move}.hp-field--attachment-upload>div:first-child>div>div{position:relative;padding-top:100%;background-color:rgba(0,0,0,.04)}.hp-field--attachment-upload>div:first-child>div>div::before{font-family:'Font Awesome 5 Free';font-weight:900;font-style:normal;font-variant:normal;line-height:1;display:inline-block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:auto;position:absolute;right:50%;top:50%;content:'\f15b';font-size:64px;margin:-32px -24px 0 0;color:rgba(0,0,0,.05)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload>div:first-child>div>div::before{font-size:48px;margin:-24px -18px 0 0}}.hp-field--attachment-upload>div:first-child>div>div a{display:block;overflow:hidden;position:absolute;bottom:0;right:0;left:0;font-size:80%;padding:1rem;white-space:nowrap;text-overflow:ellipsis;text-align:center;color:inherit;text-decoration:none}.hp-field--attachment-upload .hp-field__button{display:flex;justify-content:center;align-items:center;position:absolute;top:.5rem;left:1.5rem;width:2rem;height:2rem;border-radius:50%;text-decoration:none;color:#fff;background-color:rgba(0,0,0,.5)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload .hp-field__button{width:20px;height:20px}.hp-field--attachment-upload .hp-field__button i{font-size:12px}}.hp-field--attachment-upload .hp-field__button--download{top:3rem}.hp-field--attachment-upload .hp-field__button--download,.hp-field--attachment-upload[data-required=true] .hp-field__button--delete{display:none}.hp-field--attachment-upload>div:first-child>div:hover .hp-field__button--download{display:flex}.hp-field--repeater table:not(:last-child){margin-bottom:1rem}.hp-field--repeater table tr{background-color:#fff}.hp-field--repeater table tr.ui-sortable-helper{display:table}@media only screen and (max-width:47.99em){.hp-field--repeater table tr{display:flex;flex-direction:column;position:relative;border:1px solid rgba(0,0,0,.1);border-radius:4px;padding-top:.25rem;padding-bottom:.25rem}.hp-field--repeater table tr.ui-sortable-helper{display:flex}.hp-field--repeater table tr:not(:last-child){margin-bottom:1rem}}.hp-field--repeater table td{vertical-align:middle}.hp-field--repeater table td:first-child,.hp-field--repeater table td:first-child *{cursor:move}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{width:1px;white-space:nowrap;padding-right:0;padding-left:0;color:#888}.hp-field--repeater table td:first-child i,.hp-field--repeater table td:last-child i{margin:0}@media only screen and (max-width:47.99em){.hp-field--repeater table td{border-bottom:none}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{position:absolute;left:-.75rem}.hp-field--repeater table td:first-child{top:0}.hp-field--repeater table td:last-child{bottom:0}}.hp-field--repeater table tr:only-child td:last-child a{pointer-events:none}.hp-field__label{display:block;margin-bottom:.5rem}.hp-field__label small{font-size:1em;font-weight:400}.hp-field__description{font-size:80%;margin-bottom:.75rem;opacity:.75}.hp-field__icon:last-child{position:relative;margin-right:-2rem}.hp-modal .hp-field--attachment-upload>div:first-child>div{flex-basis:33.33333333%;max-width:33.33333333%}.hp-modal{display:none;width:380px}@media only screen and (min-width:48em){.hp-modal--mobile{display:block;width:auto}}.hp-modal__title:not(:last-child){margin-bottom:1rem}.hp-modal__title:first-child{margin-top:0}.hp-modal .hp-menu:not(:last-child){margin-bottom:0}.flatpickr-status::after{content:'';display:block;position:absolute;bottom:2px;right:calc(50% - 2px);width:4px;height:4px;border-radius:50%;background-color:#ffb900}.flatpickr-status--success::after{background-color:#46b450}.flatpickr-status--error::after{background-color:#dc3232}.flatpickr-days{overflow:visible}.flatpickr-day-label{display:none;position:absolute;z-index:1000;right:calc(50% - 27px);bottom:40px;padding:.25rem;font-size:.625rem;line-height:1.5;text-align:center;background:rgba(0,0,0,.75);color:#fff;font-weight:400;border-radius:2px;width:54px}.flatpickr-day-label::after{content:'';display:block;border:4px solid transparent;border-top-color:rgba(0,0,0,.75);position:absolute;right:calc(50% - 4px);bottom:-8px}.flatpickr-day:hover .flatpickr-day-label{display:block}.iti{display:block}.iti .iti__search-input{border-width:0;border-radius:3px;padding-right:30px;padding-left:28px}.iti input[type=tel]{width:100%}.fancybox-slide--html .fancybox-content{direction:rtl;text-align:right}.fancybox-slide--html .fancybox-close-small{left:0;right:auto}.fancybox-container .fancybox-caption{direction:rtl}
     1.hp-icon{font-size:16px}.hp-icon--rtl{transform:scaleX(-1)}.hp-link{display:inline-flex;align-items:center;text-decoration:none}.hp-link:not(span){cursor:pointer}.hp-link:not(:hover){color:inherit}.hp-link i:first-child{margin-left:.5rem}.hp-link:last-child i:only-child{margin-left:0}.hp-link--wrap{display:block}.hp-link--wrap i{vertical-align:middle;margin-top:-.125em}.hp-text--secondary{color:rgba(0,0,0,.5)}.hp-status span{display:inline-block;border:1px solid rgba(0,0,0,.06);padding:.4rem .5rem;white-space:nowrap;line-height:1;font-size:80%}.hp-status--draft span,.hp-status--trash span,.hp-status--wc-refunded span{color:#ff3860;border-color:#ff3860}.hp-status--pending span,.hp-status--wc-on-hold span,.hp-status--wc-processing span{color:#ffcb00;border-color:#ffcb00}.hp-status--publish span,.hp-status--wc-completed span{color:#15cd72;border-color:#15cd72}.hp-block[data-state=loading],.hp-form[data-state=loading]{position:relative;opacity:.5}.hp-block[data-state=loading]::after,.hp-form[data-state=loading]::after{content:'';display:block;position:absolute;right:0;top:0;left:0;bottom:0;z-index:1000}.hp-form--narrow{width:100%}.hp-form__description:not(:last-child),.hp-form__messages:not(:last-child){margin-bottom:1rem}.hp-form>.hp-form__messages:not(:last-child){margin-bottom:1.5rem}.hp-form__messages{display:none;border-right:3px solid transparent;background-color:rgba(0,0,0,.04);padding:1rem 1.5rem}.hp-form__messages--info{border-right-color:#00a0d2}.hp-form__messages--warning{border-right-color:#ffb900}.hp-form__messages--error{border-right-color:#dc3232}.hp-form__messages--success{border-right-color:#46b450}.hp-form__messages>div:not(:last-child){margin-bottom:.5rem}.hp-form__fields:not(:last-child),.hp-form__footer:not(:last-child){margin-bottom:2rem}.hp-form__header:not(:last-child){margin-bottom:1.5rem}.hp-form__actions,.hp-form__footer{display:flex;align-items:center}.hp-form__footer{justify-content:space-between}.hp-form--narrow .hp-form__button{width:100%}.hp-form--narrow .hp-form__button:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form__button{width:100%}.hp-form__button:not(:last-child){margin-bottom:1rem}}.hp-form--narrow .hp-form__actions,.hp-form--narrow .hp-form__footer{flex-direction:column}@media only screen and (max-width:47.99em){.hp-form__actions,.hp-form__footer{flex-direction:column}}.hp-form__field:not(:last-child){margin-bottom:1.5rem}.hp-form__field--hidden{display:none}.hp-form__action:not(:last-child){margin-left:1.5rem}.hp-form--narrow .hp-form__action{text-align:center}.hp-form--narrow .hp-form__action:not(:last-child){margin:0 0 .5rem}@media only screen and (max-width:47.99em){.hp-form__action:not(:last-child){margin:0 0 .5rem}}.hp-form--narrow button.hp-form__action:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form button.hp-form__action:not(:last-child){margin-bottom:1rem}}.hp-modal .hp-form{width:100%}.hp-modal .hp-form:not(:last-child){margin-bottom:0}.hp-modal .hp-form__button{width:100%}.hp-modal .hp-form__button:not(:last-child){margin-bottom:1rem}.hp-modal .hp-form__actions,.hp-modal .hp-form__footer{flex-direction:column}.hp-modal .hp-form__action:not(:last-child){margin:0 0 .5rem}button.hp-modal .hp-form__action:not(:last-child){margin-bottom:1rem}.hp-field--hidden{display:none}.hp-field--email,.hp-field--number,.hp-field--password,.hp-field--search,.hp-field--select,.hp-field--text,.hp-field--textarea,.hp-field--url{width:100%;min-width:1px}.hp-field--email,.hp-field--password,.hp-field--url{direction:ltr;text-align:right}.hp-field--textarea{max-width:100%;min-height:8rem}input[type=color].hp-field--color{appearance:none;-webkit-appearance:none;width:40px;height:40px;padding:0;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer;background:0 0}input[type=color].hp-field--color::-webkit-color-swatch-wrapper{padding:0}input[type=color].hp-field--color::-webkit-color-swatch{border:none;border-radius:2px}input[type=color].hp-field--color::-moz-color-swatch{border:none;border-radius:2px}.hp-field--attachment-upload::after{display:table;clear:both;content:''}.hp-field--attachment-upload label{position:relative;float:right;overflow:hidden;margin:0!important;width:auto!important}.hp-field--attachment-upload input[type=file]{font-size:200px!important;position:absolute;top:0;left:0;margin:0;cursor:pointer;opacity:0;direction:rtl}.hp-field--attachment-upload>div:first-child:not(:empty){margin-bottom:-2rem;padding-bottom:1rem}.hp-field--attachment-upload>div:first-child>div{position:relative;margin-bottom:2rem}.hp-field--attachment-upload>div:first-child>div img{display:block;width:100%;height:auto}.hp-field--attachment-upload>div:first-child>div:not(:only-child) img{cursor:move}.hp-field--attachment-upload>div:first-child>div>div{position:relative;padding-top:100%;background-color:rgba(0,0,0,.04)}.hp-field--attachment-upload>div:first-child>div>div::before{font-family:'Font Awesome 5 Free';font-weight:900;font-style:normal;font-variant:normal;line-height:1;display:inline-block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:auto;position:absolute;right:50%;top:50%;content:'\f15b';font-size:64px;margin:-32px -24px 0 0;color:rgba(0,0,0,.05)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload>div:first-child>div>div::before{font-size:48px;margin:-24px -18px 0 0}}.hp-field--attachment-upload>div:first-child>div>div a{display:block;overflow:hidden;position:absolute;bottom:0;right:0;left:0;font-size:80%;padding:1rem;white-space:nowrap;text-overflow:ellipsis;text-align:center;color:inherit;text-decoration:none}.hp-field--attachment-upload .hp-field__button{display:flex;justify-content:center;align-items:center;position:absolute;top:.5rem;left:1.5rem;width:2rem;height:2rem;border-radius:50%;text-decoration:none;color:#fff;background-color:rgba(0,0,0,.5)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload .hp-field__button{width:20px;height:20px}.hp-field--attachment-upload .hp-field__button i{font-size:12px}}.hp-field--attachment-upload .hp-field__button--download{top:3rem}.hp-field--attachment-upload .hp-field__button--download,.hp-field--attachment-upload[data-required=true] .hp-field__button--delete{display:none}.hp-field--attachment-upload>div:first-child>div:hover .hp-field__button--download{display:flex}.hp-field--repeater table:not(:last-child){margin-bottom:1rem}.hp-field--repeater table tr{background-color:#fff}.hp-field--repeater table tr.ui-sortable-helper{display:table}@media only screen and (max-width:47.99em){.hp-field--repeater table tr{display:flex;flex-direction:column;position:relative;border:1px solid rgba(0,0,0,.1);border-radius:4px;padding-top:.25rem;padding-bottom:.25rem}.hp-field--repeater table tr.ui-sortable-helper{display:flex}.hp-field--repeater table tr:not(:last-child){margin-bottom:1rem}}.hp-field--repeater table td{vertical-align:middle}.hp-field--repeater table td:first-child,.hp-field--repeater table td:first-child *{cursor:move}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{width:1px;white-space:nowrap;padding-right:0;padding-left:0;color:#888}.hp-field--repeater table td:first-child i,.hp-field--repeater table td:last-child i{margin:0}@media only screen and (max-width:47.99em){.hp-field--repeater table td{border-bottom:none}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{position:absolute;left:-.75rem}.hp-field--repeater table td:first-child{top:0}.hp-field--repeater table td:last-child{bottom:0}}.hp-field--repeater table tr:only-child td:last-child a{pointer-events:none}.hp-field__label{display:block;margin-bottom:.5rem}.hp-field__label small{font-size:1em;font-weight:400}.hp-field__description{font-size:80%;margin-bottom:.75rem;opacity:.75}.hp-field__icon:last-child{position:relative;margin-right:-2rem}.hp-modal .hp-field--attachment-upload>div:first-child>div{flex-basis:33.33333333%;max-width:33.33333333%}.hp-modal{display:none;width:380px}@media only screen and (min-width:48em){.hp-modal--mobile{display:block;width:auto}}.hp-modal__title:not(:last-child){margin-bottom:1rem}.hp-modal__title:first-child{margin-top:0}.hp-modal .hp-menu:not(:last-child){margin-bottom:0}.flatpickr-status::after{content:'';display:block;position:absolute;bottom:2px;right:calc(50% - 2px);width:4px;height:4px;border-radius:50%;background-color:#ffb900}.flatpickr-status--success::after{background-color:#46b450}.flatpickr-status--error::after{background-color:#dc3232}.flatpickr-days{overflow:visible}.flatpickr-day-label{display:none;position:absolute;z-index:1000;right:calc(50% - 27px);bottom:40px;padding:.25rem;font-size:.625rem;line-height:1.5;text-align:center;background:rgba(0,0,0,.75);color:#fff;font-weight:400;border-radius:2px;width:54px}.flatpickr-day-label::after{content:'';display:block;border:4px solid transparent;border-top-color:rgba(0,0,0,.75);position:absolute;right:calc(50% - 4px);bottom:-8px}.flatpickr-day:hover .flatpickr-day-label{display:block}.iti{display:block}.iti .iti__search-input{border-width:0;border-radius:3px;padding-right:30px;padding-left:28px}.iti input[type=tel]{width:100%}.fancybox-slide--html .fancybox-content{direction:rtl;text-align:right}.fancybox-slide--html .fancybox-close-small{left:0;right:auto}.fancybox-container .fancybox-caption{direction:rtl}
  • hivepress/trunk/assets/css/common.less

    r3732142 r3747070  
    324324                &--url {
    325325                        direction: ltr /*rtl:ignore*/;
     326                        text-align: left;
    326327                }
    327328
  • hivepress/trunk/assets/css/common.min.css

    r3732142 r3747070  
    1 .hp-icon{font-size:16px}.hp-icon--rtl{transform:scaleX(1)}.hp-link{display:inline-flex;align-items:center;text-decoration:none}.hp-link:not(span){cursor:pointer}.hp-link:not(:hover){color:inherit}.hp-link i:first-child{margin-right:.5rem}.hp-link:last-child i:only-child{margin-right:0}.hp-link--wrap{display:block}.hp-link--wrap i{vertical-align:middle;margin-top:-.125em}.hp-text--secondary{color:rgba(0,0,0,.5)}.hp-status span{display:inline-block;border:1px solid rgba(0,0,0,.06);padding:.4rem .5rem;white-space:nowrap;line-height:1;font-size:80%}.hp-status--draft span,.hp-status--trash span,.hp-status--wc-refunded span{color:#ff3860;border-color:#ff3860}.hp-status--pending span,.hp-status--wc-on-hold span,.hp-status--wc-processing span{color:#ffcb00;border-color:#ffcb00}.hp-status--publish span,.hp-status--wc-completed span{color:#15cd72;border-color:#15cd72}.hp-block[data-state=loading],.hp-form[data-state=loading]{position:relative;opacity:.5}.hp-block[data-state=loading]::after,.hp-form[data-state=loading]::after{content:'';display:block;position:absolute;left:0;top:0;right:0;bottom:0;z-index:1000}.hp-form--narrow{width:100%}.hp-form__description:not(:last-child),.hp-form__messages:not(:last-child){margin-bottom:1rem}.hp-form>.hp-form__messages:not(:last-child){margin-bottom:1.5rem}.hp-form__messages{display:none;border-left:3px solid transparent;background-color:rgba(0,0,0,.04);padding:1rem 1.5rem}.hp-form__messages--info{border-left-color:#00a0d2}.hp-form__messages--warning{border-left-color:#ffb900}.hp-form__messages--error{border-left-color:#dc3232}.hp-form__messages--success{border-left-color:#46b450}.hp-form__messages>div:not(:last-child){margin-bottom:.5rem}.hp-form__fields:not(:last-child),.hp-form__footer:not(:last-child){margin-bottom:2rem}.hp-form__header:not(:last-child){margin-bottom:1.5rem}.hp-form__actions,.hp-form__footer{display:flex;align-items:center}.hp-form__footer{justify-content:space-between}.hp-form--narrow .hp-form__button{width:100%}.hp-form--narrow .hp-form__button:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form__button{width:100%}.hp-form__button:not(:last-child){margin-bottom:1rem}}.hp-form--narrow .hp-form__actions,.hp-form--narrow .hp-form__footer{flex-direction:column}@media only screen and (max-width:47.99em){.hp-form__actions,.hp-form__footer{flex-direction:column}}.hp-form__field:not(:last-child){margin-bottom:1.5rem}.hp-form__field--hidden{display:none}.hp-form__action:not(:last-child){margin-right:1.5rem}.hp-form--narrow .hp-form__action{text-align:center}.hp-form--narrow .hp-form__action:not(:last-child){margin:0 0 .5rem}@media only screen and (max-width:47.99em){.hp-form__action:not(:last-child){margin:0 0 .5rem}}.hp-form--narrow button.hp-form__action:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form button.hp-form__action:not(:last-child){margin-bottom:1rem}}.hp-modal .hp-form{width:100%}.hp-modal .hp-form:not(:last-child){margin-bottom:0}.hp-modal .hp-form__button{width:100%}.hp-modal .hp-form__button:not(:last-child){margin-bottom:1rem}.hp-modal .hp-form__actions,.hp-modal .hp-form__footer{flex-direction:column}.hp-modal .hp-form__action:not(:last-child){margin:0 0 .5rem}button.hp-modal .hp-form__action:not(:last-child){margin-bottom:1rem}.hp-field--hidden{display:none}.hp-field--email,.hp-field--number,.hp-field--password,.hp-field--search,.hp-field--select,.hp-field--text,.hp-field--textarea,.hp-field--url{width:100%;min-width:1px}.hp-field--email,.hp-field--password,.hp-field--url{direction:ltr}.hp-field--textarea{max-width:100%;min-height:8rem}input[type=color].hp-field--color{appearance:none;-webkit-appearance:none;width:40px;height:40px;padding:0;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer;background:0 0}input[type=color].hp-field--color::-webkit-color-swatch-wrapper{padding:0}input[type=color].hp-field--color::-webkit-color-swatch{border:none;border-radius:2px}input[type=color].hp-field--color::-moz-color-swatch{border:none;border-radius:2px}.hp-field--attachment-upload::after{display:table;clear:both;content:''}.hp-field--attachment-upload label{position:relative;float:left;overflow:hidden;margin:0!important;width:auto!important}.hp-field--attachment-upload input[type=file]{font-size:200px!important;position:absolute;top:0;right:0;margin:0;cursor:pointer;opacity:0;direction:ltr}.hp-field--attachment-upload>div:first-child:not(:empty){margin-bottom:-2rem;padding-bottom:1rem}.hp-field--attachment-upload>div:first-child>div{position:relative;margin-bottom:2rem}.hp-field--attachment-upload>div:first-child>div img{display:block;width:100%;height:auto}.hp-field--attachment-upload>div:first-child>div:not(:only-child) img{cursor:move}.hp-field--attachment-upload>div:first-child>div>div{position:relative;padding-top:100%;background-color:rgba(0,0,0,.04)}.hp-field--attachment-upload>div:first-child>div>div::before{font-family:'Font Awesome 5 Free';font-weight:900;font-style:normal;font-variant:normal;line-height:1;display:inline-block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:auto;position:absolute;left:50%;top:50%;content:'\f15b';font-size:64px;margin:-32px 0 0 -24px;color:rgba(0,0,0,.05)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload>div:first-child>div>div::before{font-size:48px;margin:-24px 0 0 -18px}}.hp-field--attachment-upload>div:first-child>div>div a{display:block;overflow:hidden;position:absolute;bottom:0;left:0;right:0;font-size:80%;padding:1rem;white-space:nowrap;text-overflow:ellipsis;text-align:center;color:inherit;text-decoration:none}.hp-field--attachment-upload .hp-field__button{display:flex;justify-content:center;align-items:center;position:absolute;top:.5rem;right:1.5rem;width:2rem;height:2rem;border-radius:50%;text-decoration:none;color:#fff;background-color:rgba(0,0,0,.5)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload .hp-field__button{width:20px;height:20px}.hp-field--attachment-upload .hp-field__button i{font-size:12px}}.hp-field--attachment-upload .hp-field__button--download{top:3rem}.hp-field--attachment-upload .hp-field__button--download,.hp-field--attachment-upload[data-required=true] .hp-field__button--delete{display:none}.hp-field--attachment-upload>div:first-child>div:hover .hp-field__button--download{display:flex}.hp-field--repeater table:not(:last-child){margin-bottom:1rem}.hp-field--repeater table tr{background-color:#fff}.hp-field--repeater table tr.ui-sortable-helper{display:table}@media only screen and (max-width:47.99em){.hp-field--repeater table tr{display:flex;flex-direction:column;position:relative;border:1px solid rgba(0,0,0,.1);border-radius:4px;padding-top:.25rem;padding-bottom:.25rem}.hp-field--repeater table tr.ui-sortable-helper{display:flex}.hp-field--repeater table tr:not(:last-child){margin-bottom:1rem}}.hp-field--repeater table td{vertical-align:middle}.hp-field--repeater table td:first-child,.hp-field--repeater table td:first-child *{cursor:move}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{width:1px;white-space:nowrap;padding-left:0;padding-right:0;color:#888}.hp-field--repeater table td:first-child i,.hp-field--repeater table td:last-child i{margin:0}@media only screen and (max-width:47.99em){.hp-field--repeater table td{border-bottom:none}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{position:absolute;right:-.75rem}.hp-field--repeater table td:first-child{top:0}.hp-field--repeater table td:last-child{bottom:0}}.hp-field--repeater table tr:only-child td:last-child a{pointer-events:none}.hp-field__label{display:block;margin-bottom:.5rem}.hp-field__label small{font-size:1em;font-weight:400}.hp-field__description{font-size:80%;margin-bottom:.75rem;opacity:.75}.hp-field__icon:last-child{position:relative;margin-left:-2rem}.hp-modal .hp-field--attachment-upload>div:first-child>div{flex-basis:33.33333333%;max-width:33.33333333%}.hp-modal{display:none;width:380px}@media only screen and (min-width:48em){.hp-modal--mobile{display:block;width:auto}}.hp-modal__title:not(:last-child){margin-bottom:1rem}.hp-modal__title:first-child{margin-top:0}.hp-modal .hp-menu:not(:last-child){margin-bottom:0}.flatpickr-status::after{content:'';display:block;position:absolute;bottom:2px;left:calc(50% - 2px);width:4px;height:4px;border-radius:50%;background-color:#ffb900}.flatpickr-status--success::after{background-color:#46b450}.flatpickr-status--error::after{background-color:#dc3232}.flatpickr-days{overflow:visible}.flatpickr-day-label{display:none;position:absolute;z-index:1000;left:calc(50% - 27px);bottom:40px;padding:.25rem;font-size:.625rem;line-height:1.5;text-align:center;background:rgba(0,0,0,.75);color:#fff;font-weight:400;border-radius:2px;width:54px}.flatpickr-day-label::after{content:'';display:block;border:4px solid transparent;border-top-color:rgba(0,0,0,.75);position:absolute;left:calc(50% - 4px);bottom:-8px}.flatpickr-day:hover .flatpickr-day-label{display:block}.iti{display:block}.iti .iti__search-input{border-width:0;border-radius:3px;padding-left:30px;padding-right:28px}.iti input[type=tel]{width:100%}.fancybox-slide--html .fancybox-content{direction:ltr;text-align:left}.fancybox-slide--html .fancybox-close-small{right:0;left:auto}.fancybox-container .fancybox-caption{direction:ltr}
     1.hp-icon{font-size:16px}.hp-icon--rtl{transform:scaleX(1)}.hp-link{display:inline-flex;align-items:center;text-decoration:none}.hp-link:not(span){cursor:pointer}.hp-link:not(:hover){color:inherit}.hp-link i:first-child{margin-right:.5rem}.hp-link:last-child i:only-child{margin-right:0}.hp-link--wrap{display:block}.hp-link--wrap i{vertical-align:middle;margin-top:-.125em}.hp-text--secondary{color:rgba(0,0,0,.5)}.hp-status span{display:inline-block;border:1px solid rgba(0,0,0,.06);padding:.4rem .5rem;white-space:nowrap;line-height:1;font-size:80%}.hp-status--draft span,.hp-status--trash span,.hp-status--wc-refunded span{color:#ff3860;border-color:#ff3860}.hp-status--pending span,.hp-status--wc-on-hold span,.hp-status--wc-processing span{color:#ffcb00;border-color:#ffcb00}.hp-status--publish span,.hp-status--wc-completed span{color:#15cd72;border-color:#15cd72}.hp-block[data-state=loading],.hp-form[data-state=loading]{position:relative;opacity:.5}.hp-block[data-state=loading]::after,.hp-form[data-state=loading]::after{content:'';display:block;position:absolute;left:0;top:0;right:0;bottom:0;z-index:1000}.hp-form--narrow{width:100%}.hp-form__description:not(:last-child),.hp-form__messages:not(:last-child){margin-bottom:1rem}.hp-form>.hp-form__messages:not(:last-child){margin-bottom:1.5rem}.hp-form__messages{display:none;border-left:3px solid transparent;background-color:rgba(0,0,0,.04);padding:1rem 1.5rem}.hp-form__messages--info{border-left-color:#00a0d2}.hp-form__messages--warning{border-left-color:#ffb900}.hp-form__messages--error{border-left-color:#dc3232}.hp-form__messages--success{border-left-color:#46b450}.hp-form__messages>div:not(:last-child){margin-bottom:.5rem}.hp-form__fields:not(:last-child),.hp-form__footer:not(:last-child){margin-bottom:2rem}.hp-form__header:not(:last-child){margin-bottom:1.5rem}.hp-form__actions,.hp-form__footer{display:flex;align-items:center}.hp-form__footer{justify-content:space-between}.hp-form--narrow .hp-form__button{width:100%}.hp-form--narrow .hp-form__button:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form__button{width:100%}.hp-form__button:not(:last-child){margin-bottom:1rem}}.hp-form--narrow .hp-form__actions,.hp-form--narrow .hp-form__footer{flex-direction:column}@media only screen and (max-width:47.99em){.hp-form__actions,.hp-form__footer{flex-direction:column}}.hp-form__field:not(:last-child){margin-bottom:1.5rem}.hp-form__field--hidden{display:none}.hp-form__action:not(:last-child){margin-right:1.5rem}.hp-form--narrow .hp-form__action{text-align:center}.hp-form--narrow .hp-form__action:not(:last-child){margin:0 0 .5rem}@media only screen and (max-width:47.99em){.hp-form__action:not(:last-child){margin:0 0 .5rem}}.hp-form--narrow button.hp-form__action:not(:last-child){margin-bottom:1rem}@media only screen and (max-width:47.99em){.hp-form button.hp-form__action:not(:last-child){margin-bottom:1rem}}.hp-modal .hp-form{width:100%}.hp-modal .hp-form:not(:last-child){margin-bottom:0}.hp-modal .hp-form__button{width:100%}.hp-modal .hp-form__button:not(:last-child){margin-bottom:1rem}.hp-modal .hp-form__actions,.hp-modal .hp-form__footer{flex-direction:column}.hp-modal .hp-form__action:not(:last-child){margin:0 0 .5rem}button.hp-modal .hp-form__action:not(:last-child){margin-bottom:1rem}.hp-field--hidden{display:none}.hp-field--email,.hp-field--number,.hp-field--password,.hp-field--search,.hp-field--select,.hp-field--text,.hp-field--textarea,.hp-field--url{width:100%;min-width:1px}.hp-field--email,.hp-field--password,.hp-field--url{direction:ltr;text-align:left}.hp-field--textarea{max-width:100%;min-height:8rem}input[type=color].hp-field--color{appearance:none;-webkit-appearance:none;width:40px;height:40px;padding:0;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer;background:0 0}input[type=color].hp-field--color::-webkit-color-swatch-wrapper{padding:0}input[type=color].hp-field--color::-webkit-color-swatch{border:none;border-radius:2px}input[type=color].hp-field--color::-moz-color-swatch{border:none;border-radius:2px}.hp-field--attachment-upload::after{display:table;clear:both;content:''}.hp-field--attachment-upload label{position:relative;float:left;overflow:hidden;margin:0!important;width:auto!important}.hp-field--attachment-upload input[type=file]{font-size:200px!important;position:absolute;top:0;right:0;margin:0;cursor:pointer;opacity:0;direction:ltr}.hp-field--attachment-upload>div:first-child:not(:empty){margin-bottom:-2rem;padding-bottom:1rem}.hp-field--attachment-upload>div:first-child>div{position:relative;margin-bottom:2rem}.hp-field--attachment-upload>div:first-child>div img{display:block;width:100%;height:auto}.hp-field--attachment-upload>div:first-child>div:not(:only-child) img{cursor:move}.hp-field--attachment-upload>div:first-child>div>div{position:relative;padding-top:100%;background-color:rgba(0,0,0,.04)}.hp-field--attachment-upload>div:first-child>div>div::before{font-family:'Font Awesome 5 Free';font-weight:900;font-style:normal;font-variant:normal;line-height:1;display:inline-block;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:auto;position:absolute;left:50%;top:50%;content:'\f15b';font-size:64px;margin:-32px 0 0 -24px;color:rgba(0,0,0,.05)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload>div:first-child>div>div::before{font-size:48px;margin:-24px 0 0 -18px}}.hp-field--attachment-upload>div:first-child>div>div a{display:block;overflow:hidden;position:absolute;bottom:0;left:0;right:0;font-size:80%;padding:1rem;white-space:nowrap;text-overflow:ellipsis;text-align:center;color:inherit;text-decoration:none}.hp-field--attachment-upload .hp-field__button{display:flex;justify-content:center;align-items:center;position:absolute;top:.5rem;right:1.5rem;width:2rem;height:2rem;border-radius:50%;text-decoration:none;color:#fff;background-color:rgba(0,0,0,.5)}@media only screen and (max-width:47.99em){.hp-field--attachment-upload .hp-field__button{width:20px;height:20px}.hp-field--attachment-upload .hp-field__button i{font-size:12px}}.hp-field--attachment-upload .hp-field__button--download{top:3rem}.hp-field--attachment-upload .hp-field__button--download,.hp-field--attachment-upload[data-required=true] .hp-field__button--delete{display:none}.hp-field--attachment-upload>div:first-child>div:hover .hp-field__button--download{display:flex}.hp-field--repeater table:not(:last-child){margin-bottom:1rem}.hp-field--repeater table tr{background-color:#fff}.hp-field--repeater table tr.ui-sortable-helper{display:table}@media only screen and (max-width:47.99em){.hp-field--repeater table tr{display:flex;flex-direction:column;position:relative;border:1px solid rgba(0,0,0,.1);border-radius:4px;padding-top:.25rem;padding-bottom:.25rem}.hp-field--repeater table tr.ui-sortable-helper{display:flex}.hp-field--repeater table tr:not(:last-child){margin-bottom:1rem}}.hp-field--repeater table td{vertical-align:middle}.hp-field--repeater table td:first-child,.hp-field--repeater table td:first-child *{cursor:move}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{width:1px;white-space:nowrap;padding-left:0;padding-right:0;color:#888}.hp-field--repeater table td:first-child i,.hp-field--repeater table td:last-child i{margin:0}@media only screen and (max-width:47.99em){.hp-field--repeater table td{border-bottom:none}.hp-field--repeater table td:first-child,.hp-field--repeater table td:last-child{position:absolute;right:-.75rem}.hp-field--repeater table td:first-child{top:0}.hp-field--repeater table td:last-child{bottom:0}}.hp-field--repeater table tr:only-child td:last-child a{pointer-events:none}.hp-field__label{display:block;margin-bottom:.5rem}.hp-field__label small{font-size:1em;font-weight:400}.hp-field__description{font-size:80%;margin-bottom:.75rem;opacity:.75}.hp-field__icon:last-child{position:relative;margin-left:-2rem}.hp-modal .hp-field--attachment-upload>div:first-child>div{flex-basis:33.33333333%;max-width:33.33333333%}.hp-modal{display:none;width:380px}@media only screen and (min-width:48em){.hp-modal--mobile{display:block;width:auto}}.hp-modal__title:not(:last-child){margin-bottom:1rem}.hp-modal__title:first-child{margin-top:0}.hp-modal .hp-menu:not(:last-child){margin-bottom:0}.flatpickr-status::after{content:'';display:block;position:absolute;bottom:2px;left:calc(50% - 2px);width:4px;height:4px;border-radius:50%;background-color:#ffb900}.flatpickr-status--success::after{background-color:#46b450}.flatpickr-status--error::after{background-color:#dc3232}.flatpickr-days{overflow:visible}.flatpickr-day-label{display:none;position:absolute;z-index:1000;left:calc(50% - 27px);bottom:40px;padding:.25rem;font-size:.625rem;line-height:1.5;text-align:center;background:rgba(0,0,0,.75);color:#fff;font-weight:400;border-radius:2px;width:54px}.flatpickr-day-label::after{content:'';display:block;border:4px solid transparent;border-top-color:rgba(0,0,0,.75);position:absolute;left:calc(50% - 4px);bottom:-8px}.flatpickr-day:hover .flatpickr-day-label{display:block}.iti{display:block}.iti .iti__search-input{border-width:0;border-radius:3px;padding-left:30px;padding-right:28px}.iti input[type=tel]{width:100%}.fancybox-slide--html .fancybox-content{direction:ltr;text-align:left}.fancybox-slide--html .fancybox-close-small{right:0;left:auto}.fancybox-container .fancybox-caption{direction:ltr}
  • hivepress/trunk/hivepress.php

    r3732142 r3747070  
    44 * Plugin URI: https://hivepress.io/
    55 * Description: Multipurpose directory, listing & classifieds plugin.
    6  * Requires at least: 5.0
     6 * Requires at least: 5.7
    77 * Requires PHP: 7.4
    8  * Version: 1.7.32
     8 * Version: 1.8.0
    99 * Author: HivePress
    1010 * Author URI: https://hivepress.io/
     11 * License: GPLv3
     12 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
    1113 * Text Domain: hivepress
    1214 * Domain Path: /languages/
  • hivepress/trunk/includes/blocks/class-form.php

    r3210133 r3747070  
    129129
    130130                        if ( $form->get_method() === 'POST' ) {
    131                                 $form->set_values( $_POST, true );
     131                                $form->set_values( $_POST, true ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Only pre-fills the rendered form with the submitted values, sanitized by the form fields; nothing is saved.
    132132                        } elseif ( $form->get_method() === 'GET' ) {
    133                                 $form->set_values( $_GET, true );
     133                                $form->set_values( $_GET, true ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Pre-fills GET forms such as search and sorting with the query values, nothing is saved.
    134134                        }
    135135
  • hivepress/trunk/includes/blocks/class-page.php

    r3174662 r3747070  
    6060                        }
    6161
    62                         query_posts( $query );
     62                        query_posts( $query ); // phpcs:ignore WordPress.WP.DiscouragedFunctions.query_posts_query_posts -- Runs on HivePress pages only, to set the main query required for theme templates and conditional tags.
    6363                }
    6464
  • hivepress/trunk/includes/blocks/class-user-password-reset-form.php

    r2692993 r3747070  
    4747                        $this->values,
    4848                        [
    49                                 'username'           => hp\get_array_value( $_GET, 'username' ),
    50                                 'password_reset_key' => hp\get_array_value( $_GET, 'password_reset_key' ),
     49                                'username'           => hp\get_array_value( $_GET, 'username' ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Pre-fills the form with the password reset link values, the key is verified on submission.
     50                                'password_reset_key' => hp\get_array_value( $_GET, 'password_reset_key' ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Pre-fills the form with the password reset link values, the key is verified on submission.
    5151                        ]
    5252                );
  • hivepress/trunk/includes/class-core.php

    r2767083 r3747070  
    306306                        $textdomain = hp\sanitize_slug( $dirname );
    307307
    308                         load_plugin_textdomain( $textdomain, false, $dirname . '/languages' );
     308                        load_plugin_textdomain( $textdomain, false, $dirname . '/languages' ); // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- Loads translations for HivePress and its extensions in one place, to avoid duplicating this code in each extension.
    309309                }
    310310        }
  • hivepress/trunk/includes/components/class-admin.php

    r3732142 r3747070  
    138138                global $pagenow;
    139139
    140                 $page_name = (string) hp\get_array_value( $_GET, 'page' );
    141                 $post_type = 'post.php' === $pagenow ? get_post_type() : (string) hp\get_array_value( $_GET, 'post_type' );
    142                 $taxonomy  = (string) hp\get_array_value( $_GET, 'taxonomy' );
     140                $page_name = (string) hp\get_array_value( $_GET, 'page' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the current admin page, nothing is saved.
     141                $post_type = 'post.php' === $pagenow ? get_post_type() : (string) hp\get_array_value( $_GET, 'post_type' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the current admin page, nothing is saved.
     142                $taxonomy  = (string) hp\get_array_value( $_GET, 'taxonomy' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the current admin page, nothing is saved.
    143143
    144144                return ( 'admin.php' === $pagenow && strpos( $page_name, 'hp_' ) === 0 ) || ( in_array( $pagenow, [ 'edit.php', 'post.php', 'post-new.php' ] ) && strpos( $post_type, 'hp_' ) === 0 ) || ( in_array( $pagenow, [ 'edit-tags.php', 'term.php' ] ) && strpos( $taxonomy, 'hp_' ) === 0 );
    … …  
    276276                global $pagenow;
    277277
    278                 if ( 'options.php' === $pagenow || ( 'admin.php' === $pagenow && 'hp_settings' === (string) hp\get_array_value( $_GET, 'page' ) ) ) {
     278                if ( 'options.php' === $pagenow || ( 'admin.php' === $pagenow && 'hp_settings' === (string) hp\get_array_value( $_GET, 'page' ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the current admin page, nothing is saved.
    279279
    280280                        // Get current tab.
    … …  
    340340                        }
    341341
    342                         if ( 'hp_settings' === hp\get_array_value( $_POST, 'option_page' ) ) {
     342                        if ( 'hp_settings' === hp\get_array_value( $_POST, 'option_page' ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Only detects HivePress settings saves to refresh rewrite rules, no data is saved.
    343343
    344344                                // Refresh permalinks.
    … …  
    386386                        $new_permalinks = $permalinks;
    387387
     388                        // Verify nonce.
     389                        $is_verified = wp_verify_nonce( hp\get_array_value( $_POST, '_wpnonce' ), 'update-permalink' );
     390
    388391                        // Get post types and taxonomies.
    389392                        $types = array_filter(
    … …  
    434437                                );
    435438
    436                                 if ( isset( $_POST[ $field_name ] ) ) {
     439                                if ( $is_verified && isset( $_POST[ $field_name ] ) ) {
    437440
    438441                                        // Get field value.
    … …  
    479482                // Render description.
    480483                if ( isset( $section['description'] ) ) {
    481                         echo '<p>' . hp\sanitize_html( $section['description'] ) . '</p>';
     484                        echo '<p>' . hp\sanitize_html( $section['description'] ) . '</p>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped with wp_kses() in hp\sanitize_html().
    482485                }
    483486        }
    … …  
    508511                }
    509512
    510                 echo $output;
     513                echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Field HTML, fields escape their own output.
    511514        }
    512515
    … …  
    612615
    613616                $first_tab   = hp\get_first_array_value( $tabs );
    614                 $current_tab = hp\get_array_value( $_GET, 'tab', $first_tab );
     617                $current_tab = hp\get_array_value( $_GET, 'tab', $first_tab ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only selects the current tab, nothing is saved.
    615618
    616619                // Set the default tab.
    … …  
    10881091
    10891092                $first_tab   = hp\get_first_array_value( $tabs );
    1090                 $current_tab = hp\get_array_value( $_GET, 'tab', $first_tab );
     1093                $current_tab = hp\get_array_value( $_GET, 'tab', $first_tab ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only selects the current tab, nothing is saved.
    10911094
    10921095                // Set the default tab.
    … …  
    11901193                                        }
    11911194
     1195                                        // Check capability.
     1196                                        if ( isset( $args['_capability'] ) && ! current_user_can( $args['_capability'] ) ) {
     1197                                                continue;
     1198                                        }
     1199
    11921200                                        // Add meta box.
    11931201                                        $this->meta_boxes[ $name ] = $args;
    … …  
    12511259
    12521260                // Check action.
    1253                 if ( hp\get_array_value( $_POST, 'action' ) !== 'editpost' ) {
     1261                if ( hp\get_array_value( $_POST, 'action' ) !== 'editpost' ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified by WordPress in post.php before saving the post.
    12541262                        return;
    12551263                }
    … …  
    12781286
    12791287                                        // Validate field.
    1280                                         $field->set_value( hp\get_array_value( $_POST, hp\prefix( $field_name ) ) );
     1288                                        $field->set_value( hp\get_array_value( $_POST, hp\prefix( $field_name ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified by WordPress in post.php before saving the post.
    12811289
    12821290                                        if ( $field->validate() ) {
    … …  
    14381446                }
    14391447
    1440                 echo $output;
     1448                echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Labels escaped with esc_html(), descriptions with wp_kses_post(), fields and blocks escape their own output.
    14411449        }
    14421450
    … …  
    14781486
    14791487                // Check quick edit.
    1480                 if ( isset( $_POST['_inline_edit'] ) ) {
     1488                if ( isset( $_POST['_inline_edit'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Only detects quick edit requests to skip them.
    14811489                        return;
    14821490                }
    … …  
    15031511
    15041512                                        // Validate field.
    1505                                         $field->set_value( hp\get_array_value( $_POST, hp\prefix( $field_name ) ) );
     1513                                        $field->set_value( hp\get_array_value( $_POST, hp\prefix( $field_name ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified by WordPress before saving the term.
    15061514
    15071515                                        if ( $field->validate() ) {
    … …  
    16291637                }
    16301638
    1631                 echo $output;
     1639                echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Labels escaped with esc_html(), descriptions with wp_kses() in hp\sanitize_html(), fields escape their own output.
    16321640        }
    16331641
    … …  
    16581666
    16591667                                        // Validate field.
    1660                                         $field->set_value( hp\get_array_value( $_POST, hp\prefix( $field_name ) ) );
     1668                                        $field->set_value( hp\get_array_value( $_POST, hp\prefix( $field_name ) ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified by WordPress in user-edit.php before saving the profile.
    16611669
    16621670                                        if ( $field->validate() ) {
    … …  
    17671775                }
    17681776
    1769                 echo $output;
     1777                echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Titles and labels escaped with esc_html(), descriptions with wp_kses_post(), fields escape their own output.
    17701778        }
    17711779
    … …  
    18961904
    18971905                                $notices[ 'license_request_' . md5( $product_names ) ] = [
    1898                                         'type'        => 'error',
     1906                                        'type'        => 'warning',
    18991907                                        'dismissible' => true,
    19001908                                        'text'        => sprintf(
    19011909                                                /* translators: 1: settings URL, 2: unlicensed products. */
    1902                                                 hp\sanitize_html( __( 'Please <a href="%1$s">add the license keys</a> for the installed premium HivePress themes and extensions. The following products without valid licenses are going to be disabled automatically: %2$s.', 'hivepress' ) ),
     1910                                                hp\sanitize_html( __( 'Please <a href="%1$s">add the license keys</a> for the installed premium HivePress themes and extensions to keep receiving security and feature updates: %2$s.', 'hivepress' ) ),
    19031911                                                esc_url( admin_url( 'admin.php?page=hp_settings&tab=integrations' ) ),
    19041912                                                $product_names
    … …  
    20062014
    20072015                // Render settings errors.
    2008                 if ( 'admin.php' === $pagenow && 'hp_settings' === (string) hp\get_array_value( $_GET, 'page' ) ) {
     2016                if ( 'admin.php' === $pagenow && 'hp_settings' === (string) hp\get_array_value( $_GET, 'page' ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the current admin page, nothing is saved.
    20092017                        ob_start();
    20102018
    … …  
    20152023                }
    20162024
    2017                 echo $output;
     2025                echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Notices escaped with wp_kses() in render_notice(), settings error messages escaped with esc_html() when added.
    20182026        }
    20192027
    … …  
    21302138                $output .= hivepress()->request->get_context( 'admin_footer' );
    21312139
    2132                 echo $output;
     2140                echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Modal block HTML, blocks escape their own output.
    21332141        }
    21342142
  • hivepress/trunk/includes/components/class-attribute.php

    r3732142 r3747070  
    7979                add_action( 'add_meta_boxes', [ $this, 'remove_meta_boxes' ], 100 );
    8080
     81                // Restrict meta fields.
     82                add_filter( 'map_meta_cap', [ $this, 'restrict_meta_fields' ], 10, 4 );
     83
    8184                // Redirect archive page.
    8285                add_action( 'template_redirect', [ $this, 'redirect_archive_page' ] );
    … …  
    318321                $category_id = null;
    319322
    320                 if ( isset( $_GET['_category'] ) ) {
    321                         $category_id = absint( $_GET['_category'] );
     323                if ( isset( $_GET['_category'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only reads the category ID of the current search, nothing is saved.
     324                        $category_id = absint( $_GET['_category'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only reads the category ID of the current search, nothing is saved.
    322325
    323326                        if ( $validate && $category_id && ! term_exists( $category_id, $taxonomy ) ) {
    … …  
    550553                foreach ( $this->get_models() as $model ) {
    551554                        $post_types[ $model . '_attribute' ] = [
    552                                 'public'       => false,
    553                                 'show_ui'      => true,
    554                                 'show_in_menu' => 'user' === $model ? 'users.php' : 'edit.php?post_type=' . hp\prefix( $model ),
    555                                 'supports'     => [ 'title', 'page-attributes' ],
    556 
    557                                 'labels'       => [
     555                                'public'          => false,
     556                                'show_ui'         => true,
     557                                'show_in_menu'    => 'user' === $model ? 'users.php' : 'edit.php?post_type=' . hp\prefix( $model ),
     558                                'supports'        => [ 'title', 'page-attributes' ],
     559                                'capability_type' => 'page',
     560
     561                                'labels'          => [
    558562                                        'name'               => hivepress()->translator->get_string( 'attributes' ),
    559563                                        'singular_name'      => hivepress()->translator->get_string( 'attribute' ),
    … …  
    776780                                                'show_in_menu'       => false,
    777781                                                'rewrite'            => false,
     782
     783                                                'capabilities'       => [
     784                                                        'assign_terms' => 'edit_others_posts',
     785                                                ],
    778786
    779787                                                'labels'             => [
    … …  
    920928
    921929                // Check action.
    922                 if ( hp\get_array_value( $_POST, 'action' ) !== 'editpost' ) {
     930                if ( hp\get_array_value( $_POST, 'action' ) !== 'editpost' ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Only detects post edit form saves to refresh rewrite rules, no data is saved.
    923931                        return;
    924932                }
    … …  
    11401148                // Add fields.
    11411149                foreach ( $this->get_attributes( $model, $category_ids ) as $attribute_name => $attribute ) {
    1142                         if ( ! $attribute['protected'] && ! isset( $meta_box['fields'][ $attribute_name ] ) ) {
     1150                        if ( ! $attribute['protected'] && ( $attribute['editable'] || current_user_can( 'edit_others_posts' ) ) && ! isset( $meta_box['fields'][ $attribute_name ] ) ) {
    11431151                                $meta_box['fields'][ $attribute_name ] = $attribute['edit_field'];
    11441152                        }
    … …  
    20972105
    20982106        /**
     2107         * Restricts meta fields.
     2108         *
     2109         * @param array  $caps Primitive capabilities.
     2110         * @param string $cap Meta capability.
     2111         * @param int    $user_id User ID.
     2112         * @param array  $args Capability arguments.
     2113         * @return array
     2114         */
     2115        public function restrict_meta_fields( $caps, $cap, $user_id, $args ) {
     2116                if ( in_array( $cap, [ 'add_post_meta', 'edit_post_meta', 'delete_post_meta' ], true ) && strpos( (string) hp\get_array_value( $args, 1 ), 'hp_' ) === 0 ) {
     2117                        $caps[] = 'edit_others_posts';
     2118                }
     2119
     2120                return $caps;
     2121        }
     2122
     2123        /**
    20992124         * Redirects archive page.
    21002125         */
    … …  
    22412266
    22422267                                // Set form values.
    2243                                 $sort_form->set_values( $_GET, true );
     2268                                $sort_form->set_values( $_GET, true ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Sets the sorting form values from the query, nothing is saved.
    22442269
    22452270                                if ( $sort_form->validate() ) {
    … …  
    23142339
    23152340                        // Get attribute fields.
    2316                         $attribute_fields = $this->get_attribute_fields( $model, $_GET );
     2341                        $attribute_fields = $this->get_attribute_fields( $model, $_GET ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Filters the search query by attribute values, nothing is saved.
    23172342
    23182343                        // Get query arguments.
  • hivepress/trunk/includes/components/class-cache.php

    r3450514 r3747070  
    480480                global $wpdb;
    481481
     482                // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Bulk deletion of HivePress transients by prefix, there is no API for this.
     483
    482484                // Delete transients.
    483485                $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_hp\_%';" );
    484486                $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_timeout\_hp\_%';" );
     487
     488                // phpcs:enable
    485489        }
    486490
    … …  
    510514                                $column = $type . '_id';
    511515
     516                                // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Table and column names are built from a fixed list of meta types; finds expired meta transients, there is no API for this.
    512517                                $meta_values = $wpdb->get_results(
    513518                                        $wpdb->prepare(
    … …  
    521526                                        ARRAY_A
    522527                                );
     528                                // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
    523529
    524530                                // Delete values.
  • hivepress/trunk/includes/components/class-comment.php

    r3660816 r3747070  
    115115
    116116                        // Add clause.
    117                         $where .= $wpdb->prepare( " AND comment_type NOT IN ( {$placeholder} )", $types );
     117                        $where .= $wpdb->prepare( " AND comment_type NOT IN ( {$placeholder} )", $types ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare -- The placeholder list is generated from %s placeholders.
    118118                }
    119119
    … …  
    179179                                }
    180180
     181                                // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare -- Counts are cached above, there is no API for counting comments by excluded types; the placeholder list is generated from %s placeholders.
    181182                                if ( $types ) {
    182183
    … …  
    207208                                        );
    208209                                }
     210                                // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
    209211
    210212                                // Add stats.
  • hivepress/trunk/includes/components/class-debug.php

    r2692993 r3747070  
    119119                $scripts['less'] = [
    120120                        'handle'    => 'less',
    121                         'src'       => '//cdnjs.cloudflare.com/ajax/libs/less.js/3.9.0/less.min.js',
    122                         'version'   => false,
     121                        'src'       => hivepress()->get_url() . '/assets/vendor/less/dist/less.min.js',
    123122                        'in_footer' => false,
    124123                        'scope'     => [ 'frontend', 'backend' ],
  • hivepress/trunk/includes/components/class-editor.php

    r3452529 r3747070  
    210210                $template_id = null;
    211211
    212                 if ( is_admin() && 'post.php' === $pagenow && isset( $_GET['post'] ) ) {
    213                         $template_id = absint( $_GET['post'] );
    214                 } elseif ( $this->is_block_preview() && isset( $_GET['post_id'] ) ) {
    215                         $template_id = absint( $_GET['post_id'] );
     212                if ( is_admin() && 'post.php' === $pagenow && isset( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the edited template ID, nothing is saved.
     213                        $template_id = absint( $_GET['post'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the edited template ID, nothing is saved.
     214                } elseif ( $this->is_block_preview() && isset( $_GET['post_id'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the edited template ID, nothing is saved.
     215                        $template_id = absint( $_GET['post_id'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the edited template ID, nothing is saved.
    216216                }
    217217
    … …  
    340340
    341341                // Check request.
    342                 if ( isset( $_GET['doing_wp_cron'] ) || ( is_admin() && ! in_array( $pagenow, [ 'post.php', 'post-new.php' ] ) ) ) {
     342                if ( isset( $_GET['doing_wp_cron'] ) || ( is_admin() && ! in_array( $pagenow, [ 'post.php', 'post-new.php' ] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only detects the cron request, nothing is saved.
    343343                        return;
    344344                }
    … …  
    385385
    386386                        if ( isset( $this->blocks[ $block_type ] ) ) {
     387
     388                                // Filter block arguments.
     389                                $block_args = array_intersect_key( $block_args, $this->blocks[ $block_type ]['attributes'] );
     390
    387391                                if ( is_array( $this->template ) ) {
    388392
    … …  
    447451                // @todo remove when fixed in the theme framework.
    448452                if ( ! defined( 'REQUESTS_SILENCE_PSR0_DEPRECATIONS' ) ) {
    449                         define( 'REQUESTS_SILENCE_PSR0_DEPRECATIONS', true );
     453                        define( 'REQUESTS_SILENCE_PSR0_DEPRECATIONS', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound -- Constant defined by the Requests library in WordPress core, silences its deprecation notices.
    450454                }
    451455
  • hivepress/trunk/includes/components/class-email.php

    r3655262 r3747070  
    8282
    8383                                // Set body.
    84                                 $args['body'] = apply_filters( 'the_content', $content->post_content );
     84                                $args['body'] = apply_filters( 'the_content', $content->post_content ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core WordPress hook, applies the default content formatting.
    8585
    8686                                hivepress()->request->reset_post();
  • hivepress/trunk/includes/components/class-form.php

    r3585439 r3747070  
    444444
    445445                        foreach ( explode( '/', str_replace( '_', ' ', $name ) ) as $label ) {
    446                                 $labels[] = translate( $label, 'continents-cities' );
     446                                $labels[] = translate( $label, 'continents-cities' ); // phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText, WordPress.WP.I18n.TextDomainMismatch, WordPress.WP.I18n.LowLevelTranslationFunction -- Uses WordPress core city name translations, same as wp_timezone_choice().
    447447                        }
    448448
    … …  
    544544                                                        [
    545545                                                                'secret'   => get_option( 'hp_recaptcha_secret_key' ),
    546                                                                 'response' => sanitize_text_field( hp\get_array_value( $_POST, 'g-recaptcha-response' ) ),
     546                                                                'response' => sanitize_text_field( hp\get_array_value( $_POST, 'g-recaptcha-response' ) ), // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Only reads the reCAPTCHA response to verify it with Google; the reCAPTCHA check itself protects the form.
    547547                                                        ]
    548548                                                )
    … …  
    603603                                        'https://www.google.com/recaptcha/api.js',
    604604                                        [],
    605                                         null,
     605                                        null, // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion -- External Google API, versioned by Google.
    606606                                        false
    607607                                );
    … …  
    617617         */
    618618        public function print_scripts() {
    619                 $scripts = '';
    620619
    621620                // Get language.
    … …  
    630629
    631630                if ( file_exists( hivepress()->get_path() . $filepath ) ) {
    632                         $scripts = '<script type="module">
    633                                 import language from "' . esc_url( hivepress()->get_url() . $filepath ) . '";
    634 
    635                                 window.intlTelInputi18n = language;
    636                         </script>';
    637                 }
    638 
    639                 echo $scripts;
     631                        wp_print_inline_script_tag(
     632                                'import language from "' . esc_url( hivepress()->get_url() . $filepath ) . '";
     633
     634                                window.intlTelInputi18n = language;',
     635                                [
     636                                        'type' => 'module',
     637                                ]
     638                        );
     639                }
    640640        }
    641641}
  • hivepress/trunk/includes/components/class-hook.php

    r2751099 r3747070  
    9797        public function start_import() {
    9898                if ( ! defined( 'HP_IMPORT' ) ) {
    99                         define( 'HP_IMPORT', true );
     99                        define( 'HP_IMPORT', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound -- HP_ is the HivePress constant prefix.
    100100                }
    101101        }
  • hivepress/trunk/includes/components/class-listing.php

    r3450514 r3747070  
    404404                                $placeholder = implode( ', ', array_fill( 0, count( $child_term_ids ), '%d' ) );
    405405
     406                                // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Updates the stored term count like _update_post_term_count() does, there is no API for counting across child terms; the placeholder list is generated from %d placeholders.
     407
    406408                                // Get count.
    407409                                $count = (int) $wpdb->get_var(
    … …  
    417419                                // Update count.
    418420                                $wpdb->update( $wpdb->term_taxonomy, [ 'count' => $count ], [ 'term_id' => $parent_term_id ] );
     421
     422                                // phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
    419423                        }
    420424                }
  • hivepress/trunk/includes/components/class-router.php

    r3419338 r3747070  
    281281                $path = rtrim( $wp->request, '/' ) . '/';
    282282
    283                 if ( $_GET ) {
    284                         $path .= '?' . http_build_query( $_GET );
     283                if ( $_GET ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only builds the current URL, nothing is saved.
     284                        $path .= '?' . http_build_query( $_GET ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only builds the current URL, nothing is saved.
    285285                }
    286286
    … …  
    364364         */
    365365        public function get_redirect_url() {
    366                 return wp_validate_redirect( (string) hp\get_array_value( $_GET, 'redirect' ) );
     366                return wp_validate_redirect( (string) hp\get_array_value( $_GET, 'redirect' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only reads the redirect URL, validated with wp_validate_redirect().
    367367        }
    368368
    … …  
    565565                        // Set description.
    566566                        if ( $term->description ) {
    567                                 $context['page_description'] = apply_filters( 'the_content', $term->description );
     567                                $context['page_description'] = apply_filters( 'the_content', $term->description ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core WordPress hook, applies the default content formatting.
    568568                        }
    569569                }
    … …  
    672672                        // Render page.
    673673                        if ( isset( $route['action'] ) ) {
    674                                 echo call_user_func( $route['action'] );
     674                                echo call_user_func( $route['action'] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Page HTML rendered by HivePress templates and blocks, which escape their own output.
    675675
    676676                                exit;
  • hivepress/trunk/includes/components/class-template.php

    r2869522 r3747070  
    303303         */
    304304        public function render_site_header() {
    305                 echo $this->render_menu();
     305                echo $this->render_menu(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Block HTML, blocks escape their own output.
    306306        }
    307307
    … …  
    310310         */
    311311        public function render_site_footer() {
    312                 echo ( new Blocks\Template( [ 'template' => 'site_footer_block' ] ) )->render();
     312                echo ( new Blocks\Template( [ 'template' => 'site_footer_block' ] ) )->render(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Block HTML, blocks escape their own output.
    313313        }
    314314
  • hivepress/trunk/includes/components/class-translator.php

    r3557310 r3747070  
    4848
    4949                if ( $this->is_multilingual() ) {
    50                         $language = apply_filters( 'wpml_current_language', $language );
     50                        $language = apply_filters( 'wpml_current_language', $language ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML API hook.
    5151                }
    5252
    … …  
    8585         */
    8686        public function get_object_id( $id, $type = 'page' ) {
    87                 return apply_filters( 'wpml_object_id', $id, $type );
     87                return apply_filters( 'wpml_object_id', $id, $type ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML API hook.
    8888        }
    8989
    … …  
    152152                // Set translation.
    153153                do_action(
    154                         'wpml_set_element_language_details',
     154                        'wpml_set_element_language_details', // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML API hook.
    155155                        [
    156156                                'element_id'    => $post_id,
  • hivepress/trunk/includes/components/class-upgrade.php

    r3667702 r3747070  
    166166                if ( version_compare( $version, '1.3.0', '<' ) ) {
    167167
     168                        // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- One-time renaming of legacy meta keys and options on upgrade, there is no API for bulk renaming.
     169
    168170                        // Upgrade user meta.
    169171                        $wpdb->update( $wpdb->usermeta, [ 'meta_key' => 'hp_image' ], [ 'meta_key' => 'hp_image_id' ] );
    … …  
    179181                        // Upgrade options.
    180182                        $wpdb->update( $wpdb->options, [ 'option_name' => 'hp_email_user_password_request' ], [ 'option_name' => 'hp_email_user_request_password' ] );
     183
     184                        // phpcs:enable
    181185                }
    182186        }
  • hivepress/trunk/includes/components/class-user.php

    r3732142 r3747070  
    132132
    133133                /**
    134                  * Fires when a new user is verified.
     134                 * Fires when a new user's email is verified via the verification link, social login or admin confirmation, or right after registration if email verification is disabled.
    135135                 *
    136136                 * @hook hivepress/v1/models/user/verify
    137137                 * @param {int} $user_id User ID.
    138                  * @param {array} $values User values.
     138                 * @param {array} $values User values (on registration only).
    139139                 */
    140140                do_action( 'hivepress/v1/models/user/verify', $user_id, $values );
    … …  
    263263                                'type'         => 'url',
    264264                                'display_type' => 'hidden',
    265                                 'default'      => hp\get_array_value( $_GET, 'redirect' ),
     265                                'default'      => hp\get_array_value( $_GET, 'redirect' ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only sets the default redirect URL of the rendered form, nothing is saved.
    266266                                '_separate'    => true,
    267267                        ];
    … …  
    416416
    417417                // Get user ID.
    418                 $user_id = absint( hp\get_array_value( $_GET, 'user_id' ) );
     418                $user_id = absint( hp\get_array_value( $_GET, 'user_id' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only checks which profile fields to display, nothing is saved.
    419419
    420420                if ( ! $user_id ) {
    … …  
    446446
    447447                // Delete verification key.
    448                 if ( hp\get_array_value( $_POST, 'hp_email_verified' ) && get_user_meta( $user_id, 'hp_email_verify_key', true ) ) {
     448                if ( hp\get_array_value( $_POST, 'hp_email_verified' ) && get_user_meta( $user_id, 'hp_email_verify_key', true ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce verified by WordPress in user-edit.php before saving the profile.
    449449                        delete_user_meta( $user_id, 'hp_email_verified' );
    450450                        delete_user_meta( $user_id, 'hp_email_verify_key' );
    … …  
    453453
    454454                                // Verify user.
    455                                 do_action( 'hivepress/v1/models/user/verify', $user_id );
     455                                do_action( 'hivepress/v1/models/user/verify', $user_id, [] );
    456456                        }
    457457                }
  • hivepress/trunk/includes/configs/meta-boxes.php

    r3663494 r3747070  
    5252
    5353        'listing_settings'          => [
    54                 'title'  => hivepress()->translator->get_string( 'settings' ),
    55                 'screen' => 'listing',
    56                 'model'  => 'listing',
     54                'title'       => hivepress()->translator->get_string( 'settings' ),
     55                'screen'      => 'listing',
     56                'model'       => 'listing',
     57                '_capability' => 'edit_others_posts',
    5758
    5859                'fields' => [
    … …  
    146147
    147148        'vendor_settings'           => [
    148                 'title'  => hivepress()->translator->get_string( 'settings' ),
    149                 'screen' => 'vendor',
    150                 'model'  => 'vendor',
     149                'title'       => hivepress()->translator->get_string( 'settings' ),
     150                'screen'      => 'vendor',
     151                'model'       => 'vendor',
     152                '_capability' => 'edit_others_posts',
    151153
    152154                'fields' => [
  • hivepress/trunk/includes/configs/post-types.php

    r3086095 r3747070  
    1313return [
    1414        'email'    => [
    15                 'public'       => false,
    16                 'show_ui'      => true,
    17                 'show_in_menu' => 'hp_settings',
    18                 'supports'     => [ 'title', 'editor' ],
     15                'public'          => false,
     16                'show_ui'         => true,
     17                'show_in_menu'    => 'hp_settings',
     18                'supports'        => [ 'title', 'editor' ],
     19                'capability_type' => 'page',
    1920
    20                 'labels'       => [
     21                'labels'          => [
    2122                        'name'               => esc_html__( 'Emails', 'hivepress' ),
    2223                        'singular_name'      => esc_html__( 'Email', 'hivepress' ),
    … …  
    3334
    3435        'template' => [
    35                 'public'       => false,
    36                 'show_ui'      => true,
    37                 'show_in_rest' => true,
    38                 'show_in_menu' => 'hp_settings',
    39                 'supports'     => [ 'title', 'editor' ],
     36                'public'          => false,
     37                'show_ui'         => true,
     38                'show_in_rest'    => true,
     39                'show_in_menu'    => 'hp_settings',
     40                'supports'        => [ 'title', 'editor' ],
     41                'capability_type' => 'page',
    4042
    41                 'labels'       => [
     43                'labels'          => [
    4244                        'name'               => esc_html__( 'Templates', 'hivepress' ),
    4345                        'singular_name'      => esc_html__( 'Template', 'hivepress' ),
  • hivepress/trunk/includes/configs/strings.php

    r3655262 r3747070  
    4545        'expiration_period'                         => esc_html__( 'Expiration Period', 'hivepress' ),
    4646        'expiration_date'                           => esc_html__( 'Expiration Date', 'hivepress' ),
     47        /* translators: %s: date. */
    4748        'expires_on'                                => esc_html__( 'Expires %s', 'hivepress' ),
     49        /* translators: %s: date. */
    4850        'expired_on'                                => esc_html__( 'Expired %s', 'hivepress' ),
    4951        'default_fields'                            => esc_html__( 'Default Fields', 'hivepress' ),
  • hivepress/trunk/includes/controllers/class-attachment.php

    r3655262 r3747070  
    173173
    174174                // Check file.
    175                 if ( ! isset( $_FILES['file'] ) ) {
     175                if ( ! isset( $_FILES['file'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- REST API request; WordPress requires a valid REST nonce for cookie authentication, otherwise the user is not logged in.
    176176                        return hp\rest_error( 400 );
    177177                }
    178178
    179179                // Check file format.
    180                 if ( $parent_field->get_formats() && ! hivepress()->attachment->is_valid_file( $_FILES['file']['tmp_name'], $_FILES['file']['name'], $parent_field->get_formats() ) ) {
     180                if ( $parent_field->get_formats() && ! hivepress()->attachment->is_valid_file( $_FILES['file']['tmp_name'], $_FILES['file']['name'], $parent_field->get_formats() ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotValidated, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- REST API request with WordPress REST nonce check; the file type is validated by wp_check_filetype_and_ext() in is_valid_file() and by media_handle_upload().
    181181
    182182                        /* translators: %s: file extensions. */
  • hivepress/trunk/includes/controllers/class-google.php

    r2692993 r3747070  
    7373
    7474                // Get state.
    75                 $state = json_decode( wp_unslash( hp\get_array_value( $_GET, 'state' ) ), true );
     75                $state = json_decode( wp_unslash( hp\get_array_value( $_GET, 'state' ) ), true ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is passed in the OAuth state parameter and verified below.
    7676
    7777                if ( ! $state ) {
    … …  
    140140
    141141                // Verify nonce.
    142                 $nonce = hp\get_array_value( $_GET, 'nonce' );
     142                $nonce = hp\get_array_value( $_GET, 'nonce' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce is verified below.
    143143
    144144                if ( ! wp_verify_nonce( $nonce, 'google_oauth_revoke_access' ) ) {
  • hivepress/trunk/includes/controllers/class-listing.php

    r3732142 r3747070  
    579579                // Get category.
    580580                $category    = null;
    581                 $category_id = is_tax() ? get_queried_object_id() : absint( hp\get_array_value( $_GET, '_category' ) );
     581                $category_id = is_tax() ? get_queried_object_id() : absint( hp\get_array_value( $_GET, '_category' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only reads the category ID for the redirect, nothing is saved.
    582582
    583583                if ( $category_id ) {
    … …  
    10411041                // Check redirect.
    10421042                // @todo remove temporary fix.
    1043                 if ( isset( $_GET['redirect'] ) ) {
     1043                if ( isset( $_GET['redirect'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only resets the category of the current user's draft listing being submitted.
    10441044                        wp_set_post_terms( $listing->get_id(), [], 'hp_listing_category' );
    10451045
  • hivepress/trunk/includes/controllers/class-user.php

    r3732142 r3747070  
    889889
    890890                // Get username and email key.
    891                 $username  = sanitize_user( hp\get_array_value( $_GET, 'username' ) );
    892                 $email_key = sanitize_key( hp\get_array_value( $_GET, 'email_verify_key' ) );
     891                $username  = sanitize_user( hp\get_array_value( $_GET, 'username' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Verified with the secret email verification key sent by email instead of a nonce.
     892                $email_key = sanitize_key( hp\get_array_value( $_GET, 'email_verify_key' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Verified with the secret email verification key sent by email instead of a nonce.
    893893
    894894                if ( ! $username || ! $email_key ) {
    … …  
    927927
    928928                // Verify user.
    929                 do_action( 'hivepress/v1/models/user/verify', $user->ID );
     929                do_action( 'hivepress/v1/models/user/verify', $user->ID, [] );
    930930
    931931                // Check authentication.
    … …  
    939939                wp_set_auth_cookie( $user->ID, true );
    940940
    941                 do_action( 'wp_login', $user->user_login, $user );
     941                do_action( 'wp_login', $user->user_login, $user ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core WordPress hook, fired after logging in like wp_signon() does.
    942942
    943943                // Redirect user.
    … …  
    10121012
    10131013                if ( $user ) {
     1014                        /* translators: %s: user name. */
    10141015                        $title = sprintf( esc_html__( 'Profile of %s', 'hivepress' ), $user->get_display_name() );
    10151016                }
  • hivepress/trunk/includes/emails/class-listing-approve.php

    r2692993 r3747070  
    4646                        [
    4747                                'subject' => hivepress()->translator->get_string( 'listing_approved' ),
    48                                 'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Your listing "%listing_title%" has been approved, click on the following link to view it: %listing_url%', 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Your listing "%listing_title%" has been approved, click on the following link to view it: %listing_url%', 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/emails/class-listing-expire.php

    r2692993 r3747070  
    4646                        [
    4747                                'subject' => hivepress()->translator->get_string( 'listing_expired' ),
    48                                 'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Your listing "%listing_title%" has expired, click on the following link to renew it: %listing_url%', 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Your listing "%listing_title%" has expired, click on the following link to renew it: %listing_url%', 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/emails/class-listing-reject.php

    r2692993 r3747070  
    4646                        [
    4747                                'subject' => hivepress()->translator->get_string( 'listing_rejected' ),
    48                                 'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Unfortunately, your listing "%listing_title%" has been rejected.', 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Unfortunately, your listing "%listing_title%" has been rejected.', 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/emails/class-user-delete.php

    r3660816 r3747070  
    4646                        [
    4747                                'subject' => esc_html__( 'Account Deleted', 'hivepress' ),
    48                                 'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Your account has been deleted, along with any associated content.', 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Your account has been deleted, along with any associated content.', 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/emails/class-user-email-verify.php

    r2692993 r3747070  
    4646                        [
    4747                                'subject' => esc_html__( 'Email Verification', 'hivepress' ),
    48                                 'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Please click on the following link to verify your email address: %email_verify_url%', 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Please click on the following link to verify your email address: %email_verify_url%', 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment, WordPress.WP.I18n.UnorderedPlaceholdersText -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/emails/class-user-password-request.php

    r2692993 r3747070  
    4646                        [
    4747                                'subject' => esc_html__( 'Password Reset', 'hivepress' ),
    48                                 'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Please click on the following link to set a new password: %password_reset_url%', 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( 'Hi, %user_name%! Please click on the following link to set a new password: %password_reset_url%', 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/emails/class-user-register.php

    r2723732 r3747070  
    4646                        [
    4747                                'subject' => esc_html__( 'Registration Complete', 'hivepress' ),
    48                                 'body'    => hp\sanitize_html( __( "Hi, %user_name%! Thank you for registering, now you can access website areas that require an account.", 'hivepress' ) ),
     48                                'body'    => hp\sanitize_html( __( "Hi, %user_name%! Thank you for registering, now you can access website areas that require an account.", 'hivepress' ) ), // phpcs:ignore WordPress.WP.I18n.MissingTranslatorsComment -- Email tokens, not printf placeholders.
    4949                        ],
    5050                        $args
  • hivepress/trunk/includes/fields/class-attachment-upload.php

    r3667702 r3747070  
    337337                                        'data-messages'  => wp_json_encode(
    338338                                                [
     339                                                        /* translators: %s: file size. */
    339340                                                        'max_size'  => sprintf( esc_html__( 'The file size must not exceed %s.', 'hivepress' ), size_format( wp_max_upload_size() ) ),
    340341                                                        /* translators: %s: files number. */
  • hivepress/trunk/includes/fields/class-checkbox.php

    r3655262 r3747070  
    116116                parent::normalize();
    117117
     118                if ( ! is_null( $this->value ) && ! is_scalar( $this->value ) ) {
     119                        $this->value = null;
     120                }
     121
    118122                if ( ! is_null( $this->value ) ) {
    119123                        $this->value = trim( wp_unslash( $this->value ) );
  • hivepress/trunk/includes/fields/class-date.php

    r3663494 r3747070  
    289289                                        return trim( wp_unslash( $value ) );
    290290                                },
    291                                 (array) $this->value
     291                                array_filter( (array) $this->value, 'is_scalar' )
    292292                        );
    293293
  • hivepress/trunk/includes/fields/class-field.php

    r3732142 r3747070  
    566566
    567567                if ( $shortcode ) {
    568                         $value = strip_shortcodes( $value );
    569                 }
     568                        $value = hp\strip_shortcodes( $value );
     569                }
     570
     571                // Get tokens.
     572                $tokens = array_merge(
     573                        $this->context,
     574                        [
     575                                'label'     => '<strong>' . $this->label . '</strong>',
     576                                'value'     => $value,
     577                                'raw_value' => is_array( $this->value ) ? '' : $this->escape_display_value( (string) $this->value, true ),
     578                        ]
     579                );
    570580
    571581                // Render output.
    572                 $output = hp\replace_tokens(
    573                         array_merge(
    574                                 $this->context,
    575                                 [
    576                                         'label'     => '<strong>' . $this->label . '</strong>',
    577                                         'value'     => $value,
    578                                         'raw_value' => is_array( $this->value ) ? '' : $this->escape_display_value( (string) $this->value, true ),
    579                                 ]
    580                         ),
    581                         $this->display_template,
    582                         true
    583                 );
     582                $output = '';
     583
     584                $parts = preg_split( '/(\s(?:href|src|action|formaction|xlink:href|style)\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^\s"\'>]+))/i', (string) $this->display_template, -1, PREG_SPLIT_DELIM_CAPTURE );
     585
     586                foreach ( $parts as $index => $part ) {
     587                        if ( strpos( $part, '%' ) === false ) {
     588                                $output .= $part;
     589                        } elseif ( $index % 2 && preg_match( '/^([^=]+=\s*)(["\']?)(.*)\2$/s', $part, $matches ) ) {
     590                                $attribute = hp\replace_tokens( $tokens, $matches[3], true );
     591
     592                                if ( $attribute !== $matches[3] ) {
     593                                        if ( stripos( $matches[1], 'style' ) !== false ) {
     594                                                $attribute = esc_attr( safecss_filter_attr( $attribute ) );
     595                                        } elseif ( strpbrk( strstr( $matches[3], '%', true ), ':/?#' ) === false ) {
     596                                                $attribute = esc_url( $attribute );
     597                                        }
     598
     599                                        $quote = $matches[2] ? $matches[2] : '"';
     600
     601                                        $part = $matches[1] . $quote . $attribute . $quote;
     602                                }
     603
     604                                $output .= $part;
     605                        } else {
     606                                $output .= hp\replace_tokens( $tokens, $part, true );
     607                        }
     608                }
    584609
    585610                if ( $shortcode ) {
  • hivepress/trunk/includes/fields/class-regex.php

    r3655262 r3747070  
    5959                Field::normalize();
    6060
     61                if ( ! is_null( $this->value ) && ! is_scalar( $this->value ) ) {
     62                        $this->value = null;
     63                }
     64
    6165                if ( ! is_null( $this->value ) ) {
    6266                        $this->value = trim( preg_replace( '#(?<!\\\\)/#', '\\/', trim( $this->value ) ), '^$' );
  • hivepress/trunk/includes/fields/class-text.php

    r3732142 r3747070  
    181181                parent::normalize();
    182182
     183                if ( ! is_null( $this->value ) && ! is_scalar( $this->value ) ) {
     184                        $this->value = null;
     185                }
     186
    183187                if ( ! is_null( $this->value ) ) {
    184188                        $this->value = trim( wp_unslash( $this->value ) );
  • hivepress/trunk/includes/fields/class-textarea.php

    r3732142 r3747070  
    102102                        wp_enqueue_style( 'wp-block-embed' );
    103103
    104                         return make_clickable( apply_filters( 'the_content', empty( $this->html ) ? esc_html( $this->value ) : $this->value ) );
     104                        return make_clickable( apply_filters( 'the_content', empty( $this->html ) ? esc_html( $this->value ) : $this->value ) ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Core WordPress hook, applies the default content formatting.
    105105                }
    106106        }
    … …  
    126126        protected function sanitize() {
    127127                if ( empty( $this->html ) ) {
    128                         $this->value = sanitize_textarea_field( $this->value );
     128                        $this->value = hp\strip_shortcodes( sanitize_textarea_field( $this->value ) );
    129129                } else {
    130130                        parent::sanitize();
  • hivepress/trunk/includes/forms/class-form.php

    r3114605 r3747070  
    187187                // Set message.
    188188                if ( $this->message ) {
    189                         $attributes['data-message'] = $this->message;
     189                        $attributes['data-message'] = htmlspecialchars( hp\sanitize_html( $this->message ), ENT_QUOTES, 'UTF-8' );
    190190                }
    191191
  • hivepress/trunk/includes/helpers.php

    r3732142 r3747070  
    611611        return strpos( $text, '[' ) !== false && preg_match( '/\[[a-z0-9_-]+(\]| )/i', $text );
    612612}
     613
     614/**
     615 * Strips shortcodes recursively.
     616 *
     617 * @param string $text Text to be stripped.
     618 * @return string
     619 */
     620function strip_shortcodes( $text ) {
     621        do {
     622                $stripped = $text;
     623
     624                $text = \strip_shortcodes( $stripped );
     625        } while ( $text !== $stripped );
     626
     627        return $text;
     628}
  • hivepress/trunk/includes/integrations/class-elementor-widget.php

    r3462981 r3747070  
    165165
    166166                // Create block.
    167                 $block = hp\create_class_instance( $block_class, [ $this->get_settings_for_display() ] );
     167                $block = hp\create_class_instance( $block_class, [ array_intersect_key( $this->get_settings_for_display(), (array) $block_class::get_meta( 'settings' ) ) ] );
    168168
    169169                if ( $block ) {
    170170
    171171                        // Render block.
    172                         echo $block->render();
     172                        echo $block->render(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Block HTML, blocks escape their own output.
    173173                }
    174174        }
  • hivepress/trunk/languages/hivepress.pot

    r3732142 r3747070  
    11# Copyright (C) 2026 HivePress
    2 # This file is distributed under the same license as the HivePress plugin.
     2# This file is distributed under the GPLv3.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: HivePress 1.7.32\n"
     5"Project-Id-Version: HivePress 1.8.0\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/hivepress\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2026-10-06T23:16:56+00:00\n"
     12"POT-Creation-Date: 2026-10-14T18:37:06+00:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.12.0\n"
    … …  
    6565msgstr ""
    6666
    67 #: includes/components/class-admin.php:1042
     67#: includes/components/class-admin.php:1045
    6868msgctxt "plural"
    6969msgid "All"
    7070msgstr ""
    7171
    72 #: includes/components/class-admin.php:1047
     72#: includes/components/class-admin.php:1050
    7373msgctxt "plural"
    7474msgid "Installed"
    7575msgstr ""
    7676
    77 #: includes/components/class-admin.php:1803
     77#: includes/components/class-admin.php:1811
    7878#: includes/configs/strings.php:16
    7979#: templates/admin/settings.php:6
    … …  
    8282
    8383#. translators: 1: settings URL, 2: unlicensed products.
    84 #: includes/components/class-admin.php:1902
    85 #, php-format
    86 msgid "Please <a href=\"%1$s\">add the license keys</a> for the installed premium HivePress themes and extensions. The following products without valid licenses are going to be disabled automatically: %2$s."
     84#: includes/components/class-admin.php:1910
     85#, php-format
     86msgid "Please <a href=\"%1$s\">add the license keys</a> for the installed premium HivePress themes and extensions to keep receiving security and feature updates: %2$s."
    8787msgstr ""
    8888
    8989#. translators: %s: themes URL.
    90 #: includes/components/class-admin.php:1917
     90#: includes/components/class-admin.php:1925
    9191#, php-format
    9292msgid "The current theme doesn't declare HivePress support, if you notice any styling issues please consider using one of the <a href=\"%s\">official themes</a> instead."
    … …  
    9494
    9595#. translators: %s: link URL.
    96 #: includes/components/class-admin.php:1930
     96#: includes/components/class-admin.php:1938
    9797#, php-format
    9898msgid "It's been more than 2 weeks since you installed HivePress, that's awesome! If you find it useful, please leave a review on <a href=\"%s\" target=\"_blank\">WordPress.org</a> to help us spread the word."
    … …  
    100100
    101101#. translators: %s: link URL.
    102 #: includes/components/class-admin.php:1945
     102#: includes/components/class-admin.php:1953
    103103#, php-format
    104104msgid "Great start with HivePress! Check out our <a href=\"%1$s\">premium themes</a> and <a href=\"%2$s\">extensions</a> for more tailored design and functionality."
    … …  
    106106
    107107#. translators: %s: terms URL.
    108 #: includes/components/class-admin.php:1959
     108#: includes/components/class-admin.php:1967
    109109#, php-format
    110110msgid "Help us make HivePress better by sharing <a href=\"%s\" target=\"_blank\">non-sensitive usage data</a> or dismiss this notice to opt out."
    … …  
    112112
    113113#. translators: %s: terms URL.
    114 #: includes/components/class-admin.php:1959
     114#: includes/components/class-admin.php:1967
    115115msgid "Share Usage Data"
    116116msgstr ""
    117117
    118118#. translators: %s: link URL.
    119 #: includes/components/class-admin.php:1971
     119#: includes/components/class-admin.php:1979
    120120#, php-format
    121121msgid "Have you already launched this website? Please submit it to the <a href=\"%s\" target=\"_blank\">HivePress Showcase</a> to inspire others."
    … …  
    123123
    124124#. translators: %s: link URL.
    125 #: includes/components/class-admin.php:1984
     125#: includes/components/class-admin.php:1992
    126126#, php-format
    127127msgid "Are you a developer familiar with HivePress? Join the <a href=\"%s\" target=\"_blank\">HivePress Experts</a> program to regularly get new clients."
    … …  
    129129
    130130#. translators: %s: plugin name.
    131 #: includes/components/class-admin.php:2116
     131#: includes/components/class-admin.php:2124
    132132#, php-format
    133133msgid "Deactivate %s"
    … …  
    135135
    136136#. translators: %s: link URL.
    137 #: includes/components/class-admin.php:2145
     137#: includes/components/class-admin.php:2153
    138138#, php-format
    139139msgid "Thanks for using HivePress ❤️ Your <a href=\"%s\" target=\"_blank\">review</a> matters."
    140140msgstr ""
    141141
    142 #: includes/components/class-attribute.php:782
     142#: includes/components/class-attribute.php:790
    143143msgid "Add Option"
    144144msgstr ""
    145145
    146 #: includes/components/class-attribute.php:783
     146#: includes/components/class-attribute.php:791
    147147msgid "Edit Option"
    148148msgstr ""
    149149
    150 #: includes/components/class-attribute.php:784
     150#: includes/components/class-attribute.php:792
    151151msgid "Update Option"
    152152msgstr ""
    153153
    154 #: includes/components/class-attribute.php:785
     154#: includes/components/class-attribute.php:793
    155155msgid "Parent Option"
    156156msgstr ""
    157157
    158 #: includes/components/class-attribute.php:786
     158#: includes/components/class-attribute.php:794
    159159msgid "Search Options"
    160160msgstr ""
    161161
    162 #: includes/components/class-attribute.php:787
     162#: includes/components/class-attribute.php:795
    163163msgid "No options found."
    164164msgstr ""
    165165
    166 #: includes/components/class-attribute.php:1002
     166#: includes/components/class-attribute.php:1010
    167167msgid "Edit Options"
    168168msgstr ""
    169169
    170 #: includes/components/class-attribute.php:1035
     170#: includes/components/class-attribute.php:1043
    171171msgid "Load options dynamically"
    172172msgstr ""
    173173
    174 #: includes/components/class-attribute.php:1036
     174#: includes/components/class-attribute.php:1044
    175175msgid "Check this option to load dropdown choices while typing instead of all at once."
    176176msgstr ""
    177177
    178 #: includes/components/class-attribute.php:1053
     178#: includes/components/class-attribute.php:1061
    179179msgid "Default Value"
    180180msgstr ""
    181181
    182 #: includes/components/class-attribute.php:1054
     182#: includes/components/class-attribute.php:1062
    183183msgctxt "checkbox"
    184184msgid "Checked by default"
    185185msgstr ""
    186186
    187 #: includes/components/class-attribute.php:1073
     187#: includes/components/class-attribute.php:1081
    188188msgctxt "attribute"
    189189msgid "Searchable"
    190190msgstr ""
    191191
    192 #: includes/components/class-attribute.php:1074
     192#: includes/components/class-attribute.php:1082
    193193msgid "Display in the search form"
    194194msgstr ""
    195195
    196 #: includes/components/class-attribute.php:1080
     196#: includes/components/class-attribute.php:1088
    197197msgid "Pages"
    198198msgstr ""
    199199
    200 #: includes/components/class-attribute.php:1081
     200#: includes/components/class-attribute.php:1089
    201201msgid "Create a page for each option"
    202202msgstr ""
    203203
    204 #: includes/components/class-attribute.php:1082
     204#: includes/components/class-attribute.php:1090
    205205msgid "Check this option to enable a category-like page for each attribute option."
    206206msgstr ""
    207207
    208 #: includes/components/class-attribute.php:1099
     208#: includes/components/class-attribute.php:1107
    209209msgid "Field Name"
    210210msgstr ""
    211211
    212 #: includes/components/class-attribute.php:1100
     212#: includes/components/class-attribute.php:1108
    213213msgid "Set the field name used for storing the attribute values."
    214214msgstr ""
    215215
    216 #: includes/components/class-attribute.php:1100
     216#: includes/components/class-attribute.php:1108
    217217msgid "Use lowercase letters, numbers, and underscores only."
    218218msgstr ""
    219219
    220 #: includes/components/class-attribute.php:1337
     220#: includes/components/class-attribute.php:1345
    221221msgctxt "field"
    222222msgid "requires review"
    223223msgstr ""
    224224
    225 #: includes/components/class-attribute.php:1841
    226 #: includes/configs/strings.php:214
     225#: includes/components/class-attribute.php:1849
     226#: includes/configs/strings.php:216
    227227msgid "Attributes"
    228228msgstr ""
    229229
    230 #: includes/components/class-attribute.php:1850
     230#: includes/components/class-attribute.php:1858
    231231msgctxt "attribute"
    232232msgid "Editable"
    233233msgstr ""
    234234
    235 #: includes/components/class-attribute.php:1851
     235#: includes/components/class-attribute.php:1859
    236236msgid "Allow front-end editing"
    237237msgstr ""
    238238
    239 #: includes/components/class-attribute.php:1857
    240 #: includes/components/class-attribute.php:1893
     239#: includes/components/class-attribute.php:1865
     240#: includes/components/class-attribute.php:1901
    241241msgid "Field Type"
    242242msgstr ""
    243243
    244 #: includes/components/class-attribute.php:1872
     244#: includes/components/class-attribute.php:1880
    245245msgctxt "attribute"
    246246msgid "Filterable"
    247247msgstr ""
    248248
    249 #: includes/components/class-attribute.php:1873
     249#: includes/components/class-attribute.php:1881
    250250msgid "Display in the filter form"
    251251msgstr ""
    252252
    253 #: includes/components/class-attribute.php:1879
     253#: includes/components/class-attribute.php:1887
    254254msgctxt "attribute"
    255255msgid "Indexable"
    256256msgstr ""
    257257
    258 #: includes/components/class-attribute.php:1880
     258#: includes/components/class-attribute.php:1888
    259259msgid "Include in keyword search"
    260260msgstr ""
    261261
    262 #: includes/components/class-attribute.php:1886
     262#: includes/components/class-attribute.php:1894
    263263msgctxt "attribute"
    264264msgid "Sortable"
    265265msgstr ""
    266266
    267 #: includes/components/class-attribute.php:1887
     267#: includes/components/class-attribute.php:1895
    268268msgid "Display as a sorting option"
    269269msgstr ""
    270270
    271 #: includes/components/class-attribute.php:1907
     271#: includes/components/class-attribute.php:1915
    272272msgid "Areas"
    273273msgstr ""
    274274
    275 #: includes/components/class-attribute.php:1908
     275#: includes/components/class-attribute.php:1916
    276276msgid "Choose the template areas where you want to display this attribute."
    277277msgstr ""
    278278
    279 #: includes/components/class-attribute.php:1914
    280 #: includes/components/class-attribute.php:1915
    281 #: includes/components/class-attribute.php:1916
     279#: includes/components/class-attribute.php:1922
     280#: includes/components/class-attribute.php:1923
     281#: includes/components/class-attribute.php:1924
    282282msgid "Block"
    283283msgstr ""
    284284
    285 #: includes/components/class-attribute.php:1914
    286 #: includes/components/class-attribute.php:1917
     285#: includes/components/class-attribute.php:1922
     286#: includes/components/class-attribute.php:1925
    287287msgctxt "area"
    288288msgid "primary"
    289289msgstr ""
    290290
    291 #: includes/components/class-attribute.php:1915
    292 #: includes/components/class-attribute.php:1918
     291#: includes/components/class-attribute.php:1923
     292#: includes/components/class-attribute.php:1926
    293293msgctxt "area"
    294294msgid "secondary"
    295295msgstr ""
    296296
    297 #: includes/components/class-attribute.php:1916
    298 #: includes/components/class-attribute.php:1919
     297#: includes/components/class-attribute.php:1924
     298#: includes/components/class-attribute.php:1927
    299299msgctxt "area"
    300300msgid "ternary"
    301301msgstr ""
    302302
    303 #: includes/components/class-attribute.php:1917
    304 #: includes/components/class-attribute.php:1918
    305 #: includes/components/class-attribute.php:1919
     303#: includes/components/class-attribute.php:1925
     304#: includes/components/class-attribute.php:1926
     305#: includes/components/class-attribute.php:1927
    306306msgid "Page"
    307307msgstr ""
    308308
    309 #: includes/components/class-attribute.php:1925
     309#: includes/components/class-attribute.php:1933
    310310msgid "Choose an icon for this attribute to include in the display format with the %icon% token."
    311311msgstr ""
    312312
    313 #: includes/components/class-attribute.php:1933
     313#: includes/components/class-attribute.php:1941
    314314msgid "Format"
    315315msgstr ""
    316316
    317 #: includes/components/class-attribute.php:1934
     317#: includes/components/class-attribute.php:1942
    318318msgid "Set the attribute display format."
    319319msgstr ""
    320320
    321 #: includes/components/class-attribute.php:1951
     321#: includes/components/class-attribute.php:1959
    322322msgid "Choose an icon to include in the display format with the %icon% token."
    323323msgstr ""
    324324
    325 #: includes/components/class-attribute.php:1958
    326 #: includes/configs/meta-boxes.php:130
     325#: includes/components/class-attribute.php:1966
     326#: includes/configs/meta-boxes.php:131
    327327msgctxt "sort priority"
    328328msgid "Order"
    329329msgstr ""
    330330
    331 #: includes/components/class-attribute.php:2016
     331#: includes/components/class-attribute.php:2024
    332332msgctxt "attribute"
    333333msgid "Synced"
    334334msgstr ""
    335335
    336 #: includes/components/class-attribute.php:2017
     336#: includes/components/class-attribute.php:2025
    337337msgid "Sync with the vendor field"
    338338msgstr ""
    339339
    340 #: includes/components/class-attribute.php:2018
     340#: includes/components/class-attribute.php:2026
    341341msgid "Check this option to sync the value with the vendor field of the same name."
    342342msgstr ""
    343343
    344 #: includes/components/class-attribute.php:2024
     344#: includes/components/class-attribute.php:2032
    345345msgctxt "attribute"
    346346msgid "Moderated"
    347347msgstr ""
    348348
    349 #: includes/components/class-attribute.php:2025
     349#: includes/components/class-attribute.php:2033
    350350msgid "Manually approve changes"
    351351msgstr ""
    352352
    353 #: includes/components/class-attribute.php:2032
     353#: includes/components/class-attribute.php:2040
    354354msgctxt "attribute"
    355355msgid "Related"
    356356msgstr ""
    357357
    358 #: includes/components/class-attribute.php:2033
     358#: includes/components/class-attribute.php:2041
    359359msgid "Include in related criteria"
    360360msgstr ""
    361361
    362 #: includes/components/class-attribute.php:2034
     362#: includes/components/class-attribute.php:2042
    363363msgid "Check this option if you want this attribute to determine related listings."
    364364msgstr ""
    … …  
    367367#: includes/components/class-template.php:200
    368368#: includes/configs/meta-boxes.php:21
    369 #: includes/configs/post-types.php:43
     369#: includes/configs/post-types.php:45
    370370msgid "Template"
    371371msgstr ""
    … …  
    394394msgstr ""
    395395
    396 #: includes/components/class-listing.php:438
     396#: includes/components/class-listing.php:442
    397397msgid "Gallery"
    398398msgstr ""
    399399
    400 #: includes/components/class-listing.php:588
    401 #: includes/configs/meta-boxes.php:77
     400#: includes/components/class-listing.php:592
     401#: includes/configs/meta-boxes.php:78
    402402#: includes/models/class-listing.php:96
    403403#: templates/listing/view/listing-featured-badge.php:7
    … …  
    406406msgstr ""
    407407
    408 #: includes/components/class-listing.php:592
    409 #: includes/configs/meta-boxes.php:70
     408#: includes/components/class-listing.php:596
     409#: includes/configs/meta-boxes.php:71
    410410#: includes/models/class-listing.php:102
    411411#: templates/listing/view/listing-verified-badge.php:7
    … …  
    414414msgstr ""
    415415
    416 #: includes/components/class-listing.php:721
     416#: includes/components/class-listing.php:725
    417417msgid "Edit"
    418418msgstr ""
    … …  
    498498msgstr ""
    499499
    500 #: includes/configs/meta-boxes.php:84
     500#: includes/configs/meta-boxes.php:85
    501501msgid "Featuring Date"
    502502msgstr ""
    503503
    504 #: includes/configs/meta-boxes.php:140
     504#: includes/configs/meta-boxes.php:141
    505505msgid "Display subcategories instead of listings"
    506506msgstr ""
    507507
    508 #: includes/configs/meta-boxes.php:164
     508#: includes/configs/meta-boxes.php:166
    509509msgctxt "vendor"
    510510msgid "Verified"
    511511msgstr ""
    512512
    513 #: includes/configs/meta-boxes.php:179
     513#: includes/configs/meta-boxes.php:181
    514514#: templates/user/view/user-verified-badge.php:7
    515515msgctxt "user"
    … …  
    517517msgstr ""
    518518
    519 #: includes/configs/meta-boxes.php:180
     519#: includes/configs/meta-boxes.php:182
    520520msgid "Mark this user as verified"
    521521msgstr ""
    522522
    523 #: includes/configs/post-types.php:21
    524 #: includes/configs/post-types.php:27
     523#: includes/configs/post-types.php:22
     524#: includes/configs/post-types.php:28
    525525#: includes/configs/strings.php:40
    526526msgid "Emails"
    527527msgstr ""
    528528
    529 #: includes/configs/post-types.php:22
     529#: includes/configs/post-types.php:23
    530530#: includes/configs/settings.php:390
    531531#: includes/fields/class-email.php:28
    … …  
    534534msgstr ""
    535535
    536 #: includes/configs/post-types.php:23
     536#: includes/configs/post-types.php:24
    537537msgctxt "email"
    538538msgid "Add New"
    539539msgstr ""
    540540
    541 #: includes/configs/post-types.php:24
     541#: includes/configs/post-types.php:25
     542#: includes/configs/post-types.php:27
     543msgid "Add Email"
     544msgstr ""
     545
    542546#: includes/configs/post-types.php:26
    543 msgid "Add Email"
    544 msgstr ""
    545 
    546 #: includes/configs/post-types.php:25
    547547msgid "Edit Email"
    548548msgstr ""
    549549
    550 #: includes/configs/post-types.php:28
     550#: includes/configs/post-types.php:29
    551551msgid "Search Emails"
    552552msgstr ""
    553553
    554 #: includes/configs/post-types.php:29
    555554#: includes/configs/post-types.php:30
     555#: includes/configs/post-types.php:31
    556556msgid "No emails found."
    557557msgstr ""
    558558
    559 #: includes/configs/post-types.php:42
    560 #: includes/configs/post-types.php:48
     559#: includes/configs/post-types.php:44
     560#: includes/configs/post-types.php:50
    561561msgid "Templates"
    562562msgstr ""
    563563
    564 #: includes/configs/post-types.php:44
     564#: includes/configs/post-types.php:46
    565565msgctxt "template"
    566566msgid "Add New"
    567567msgstr ""
    568568
    569 #: includes/configs/post-types.php:45
    570569#: includes/configs/post-types.php:47
     570#: includes/configs/post-types.php:49
    571571msgid "Add Template"
    572572msgstr ""
    573573
    574 #: includes/configs/post-types.php:46
     574#: includes/configs/post-types.php:48
    575575msgid "Edit Template"
    576576msgstr ""
    577577
    578 #: includes/configs/post-types.php:49
     578#: includes/configs/post-types.php:51
    579579msgid "Search Templates"
    580580msgstr ""
    581581
    582 #: includes/configs/post-types.php:50
    583 #: includes/configs/post-types.php:51
     582#: includes/configs/post-types.php:52
     583#: includes/configs/post-types.php:53
    584584msgid "No templates found."
    585585msgstr ""
    586586
    587 #: includes/configs/post-types.php:67
     587#: includes/configs/post-types.php:69
    588588msgctxt "listing"
    589589msgid "Add New"
    590590msgstr ""
    591591
    592 #: includes/configs/post-types.php:94
     592#: includes/configs/post-types.php:96
    593593msgctxt "vendor"
    594594msgid "Add New"
    … …  
    656656
    657657#: includes/configs/settings.php:305
    658 #: includes/configs/strings.php:82
     658#: includes/configs/strings.php:84
    659659msgid "Users"
    660660msgstr ""
    … …  
    874874msgstr ""
    875875
    876 #: includes/configs/strings.php:47
     876#. translators: %s: date.
     877#: includes/configs/strings.php:48
    877878#, php-format
    878879msgid "Expires %s"
    879880msgstr ""
    880881
    881 #: includes/configs/strings.php:48
     882#. translators: %s: date.
     883#: includes/configs/strings.php:50
    882884#, php-format
    883885msgid "Expired %s"
    884886msgstr ""
    885887
    886 #: includes/configs/strings.php:49
     888#: includes/configs/strings.php:51
    887889msgid "Default Fields"
    888890msgstr ""
    889891
    890 #: includes/configs/strings.php:50
     892#: includes/configs/strings.php:52
    891893msgid "Free"
    892894msgstr ""
    893895
    894 #: includes/configs/strings.php:51
     896#: includes/configs/strings.php:53
    895897msgid "Price"
    896898msgstr ""
    897899
    898 #: includes/configs/strings.php:52
     900#: includes/configs/strings.php:54
    899901msgid "Overview"
    900902msgstr ""
    901903
    902 #: includes/configs/strings.php:53
     904#: includes/configs/strings.php:55
    903905msgid "Form"
    904906msgstr ""
    905907
    906 #: includes/configs/strings.php:54
     908#: includes/configs/strings.php:56
    907909msgid "Filter Form"
    908910msgstr ""
    909911
    910 #: includes/configs/strings.php:55
     912#: includes/configs/strings.php:57
    911913msgid "Sort Form"
    912914msgstr ""
    913915
    914 #: includes/configs/strings.php:56
     916#: includes/configs/strings.php:58
    915917msgid "Result Count"
    916918msgstr ""
    917919
    918 #: includes/configs/strings.php:57
     920#: includes/configs/strings.php:59
    919921msgid "Toolbar"
    920922msgstr ""
    921923
    922 #: includes/configs/strings.php:58
     924#: includes/configs/strings.php:60
    923925msgid "Menu"
    924926msgstr ""
    925927
    926 #: includes/configs/strings.php:59
     928#: includes/configs/strings.php:61
    927929msgid "Message"
    928930msgstr ""
    929931
    930 #: includes/configs/strings.php:60
     932#: includes/configs/strings.php:62
    931933msgid "Completed"
    932934msgstr ""
    933935
    934 #: includes/configs/strings.php:61
     936#: includes/configs/strings.php:63
    935937msgid "Profile"
    936938msgstr ""
    937939
    938 #: includes/configs/strings.php:62
     940#: includes/configs/strings.php:64
    939941msgid "Pagination"
    940942msgstr ""
    941943
    942 #: includes/configs/strings.php:63
     944#: includes/configs/strings.php:65
    943945msgid "Load More"
    944946msgstr ""
    945947
    946 #: includes/configs/strings.php:64
     948#: includes/configs/strings.php:66
    947949msgid "Delete"
    948950msgstr ""
    949951
    950 #: includes/configs/strings.php:65
     952#: includes/configs/strings.php:67
    951953msgid "Performance"
    952954msgstr ""
    953955
    954 #: includes/configs/strings.php:66
     956#: includes/configs/strings.php:68
    955957msgid "Storage"
    956958msgstr ""
    957959
    958 #: includes/configs/strings.php:67
     960#: includes/configs/strings.php:69
    959961msgid "Storage Period"
    960962msgstr ""
    961963
    962 #: includes/configs/strings.php:68
     964#: includes/configs/strings.php:70
    963965msgid "Version"
    964966msgstr ""
    965967
    966 #: includes/configs/strings.php:69
     968#: includes/configs/strings.php:71
    967969msgid "API Key"
    968970msgstr ""
    969971
    970 #: includes/configs/strings.php:70
     972#: includes/configs/strings.php:72
    971973msgid "Secret Key"
    972974msgstr ""
    973975
    974 #: includes/configs/strings.php:71
     976#: includes/configs/strings.php:73
    975977msgid "Client ID"
    976978msgstr ""
    977979
    978 #: includes/configs/strings.php:72
     980#: includes/configs/strings.php:74
    979981msgid "Client Secret"
    980982msgstr ""
    981983
    982 #: includes/configs/strings.php:73
     984#: includes/configs/strings.php:75
    983985msgid "Redirect URL"
    984986msgstr ""
    985987
    986 #: includes/configs/strings.php:74
     988#: includes/configs/strings.php:76
    987989msgid "App ID"
    988990msgstr ""
    989991
    990 #: includes/configs/strings.php:75
     992#: includes/configs/strings.php:77
    991993msgid "Authorization"
    992994msgstr ""
    993995
    994 #: includes/configs/strings.php:76
     996#: includes/configs/strings.php:78
    995997msgid "Return to My Account"
    996998msgstr ""
    997999
    998 #: includes/configs/strings.php:77
     1000#: includes/configs/strings.php:79
    9991001msgid "My Account"
    10001002msgstr ""
    10011003
    1002 #: includes/configs/strings.php:78
     1004#: includes/configs/strings.php:80
    10031005msgid "Save Changes"
    10041006msgstr ""
    10051007
    1006 #: includes/configs/strings.php:79
     1008#: includes/configs/strings.php:81
    10071009msgid "Changes have been saved."
    10081010msgstr ""
    10091011
    1010 #: includes/configs/strings.php:80
     1012#: includes/configs/strings.php:82
    10111013msgid "Something went wrong."
    10121014msgstr ""
    10131015
    1014 #: includes/configs/strings.php:81
     1016#: includes/configs/strings.php:83
    10151017msgid "User"
    10161018msgstr ""
    10171019
    1018 #: includes/configs/strings.php:83
     1020#: includes/configs/strings.php:85
    10191021msgid "All Users"
    10201022msgstr ""
    10211023
    1022 #: includes/configs/strings.php:84
     1024#: includes/configs/strings.php:86
    10231025msgid "Registered Users"
    10241026msgstr ""
    10251027
    1026 #: includes/configs/strings.php:85
     1028#: includes/configs/strings.php:87
    10271029msgctxt "quantity"
    10281030msgid "Columns"
    10291031msgstr ""
    10301032
    1031 #: includes/configs/strings.php:86
     1033#: includes/configs/strings.php:88
    10321034msgctxt "quantity"
    10331035msgid "Number"
    10341036msgstr ""
    10351037
    1036 #: includes/configs/strings.php:87
     1038#: includes/configs/strings.php:89
    10371039msgid "Actions"
    10381040msgstr ""
    10391041
    1040 #: includes/configs/strings.php:88
     1042#: includes/configs/strings.php:90
    10411043msgid "Widgets"
    10421044msgstr ""
    10431045
    1044 #: includes/configs/strings.php:89
     1046#: includes/configs/strings.php:91
    10451047msgctxt "plural"
    10461048msgid "Primary"
    10471049msgstr ""
    10481050
    1049 #: includes/configs/strings.php:90
     1051#: includes/configs/strings.php:92
    10501052msgctxt "plural"
    10511053msgid "Secondary"
    10521054msgstr ""
    10531055
    1054 #: includes/configs/strings.php:91
     1056#: includes/configs/strings.php:93
    10551057msgctxt "plural"
    10561058msgid "Ternary"
    10571059msgstr ""
    10581060
    1059 #: includes/configs/strings.php:92
     1061#: includes/configs/strings.php:94
    10601062msgctxt "plural"
    10611063msgid "Related"
    10621064msgstr ""
    10631065
    1064 #: includes/configs/strings.php:93
     1066#: includes/configs/strings.php:95
    10651067msgctxt "sort order"
    10661068msgid "Item Count"
    10671069msgstr ""
    10681070
    1069 #: includes/configs/strings.php:94
     1071#: includes/configs/strings.php:96
    10701072msgctxt "sort order"
    10711073msgid "Name"
    10721074msgstr ""
    10731075
    1074 #: includes/configs/strings.php:95
     1076#: includes/configs/strings.php:97
    10751077msgctxt "sort order"
    10761078msgid "Date Added"
    10771079msgstr ""
    10781080
    1079 #: includes/configs/strings.php:96
     1081#: includes/configs/strings.php:98
    10801082msgctxt "sort order"
    10811083msgid "Date Registered"
    10821084msgstr ""
    10831085
    1084 #: includes/configs/strings.php:97
     1086#: includes/configs/strings.php:99
    10851087msgctxt "sort order"
    10861088msgid "Title"
    10871089msgstr ""
    10881090
    1089 #: includes/configs/strings.php:98
     1091#: includes/configs/strings.php:100
    10901092msgctxt "sort order"
    10911093msgid "Random"
    10921094msgstr ""
    10931095
    1094 #: includes/configs/strings.php:99
     1096#: includes/configs/strings.php:101
    10951097msgctxt "sort"
    10961098msgid "Order"
    10971099msgstr ""
    10981100
    1099 #: includes/configs/strings.php:100
     1101#: includes/configs/strings.php:102
    11001102msgctxt "imperative"
    11011103msgid "Add Details"
    … …  
    11031105
    11041106#. translators: %s: date.
    1105 #: includes/configs/strings.php:102
     1107#: includes/configs/strings.php:104
    11061108#, php-format
    11071109msgid "Added on %s"
    … …  
    11091111
    11101112#. translators: %s: WooCommerce.
    1111 #: includes/configs/strings.php:104
     1113#: includes/configs/strings.php:106
    11121114#, php-format
    11131115msgid "%s Product"
    … …  
    11151117
    11161118#. translators: %s: token list.
    1117 #: includes/configs/strings.php:106
     1119#: includes/configs/strings.php:108
    11181120#, php-format
    11191121msgid "The following tokens are available: %s."
    … …  
    11211123
    11221124#. translators: %s: extension name.
    1123 #: includes/configs/strings.php:108
     1125#: includes/configs/strings.php:110
    11241126#, php-format
    11251127msgid "%s extension is incompatible with the current HivePress version, please update HivePress or deactivate it."
    … …  
    11271129
    11281130#. translators: %s: terms URL.
    1129 #: includes/configs/strings.php:110
     1131#: includes/configs/strings.php:112
    11301132#, php-format
    11311133msgid "I agree to the <a href=\"%s\" target=\"_blank\">terms and conditions</a>"
    1132 msgstr ""
    1133 
    1134 #. translators: %s: field label.
    1135 #: includes/configs/strings.php:112
    1136 #, php-format
    1137 msgid "\"%s\" field contains an invalid value."
    11381134msgstr ""
    11391135
    … …  
    11411137#: includes/configs/strings.php:114
    11421138#, php-format
     1139msgid "\"%s\" field contains an invalid value."
     1140msgstr ""
     1141
     1142#. translators: %s: field label.
     1143#: includes/configs/strings.php:116
     1144#, php-format
    11431145msgid "\"%s\" field contains too many values."
    1144 msgstr ""
    1145 
    1146 #. translators: 1: field label, 2: length.
    1147 #: includes/configs/strings.php:116
    1148 #, php-format
    1149 msgid "\"%1$s\" can't be longer than %2$s characters."
    11501146msgstr ""
    11511147
    … …  
    11531149#: includes/configs/strings.php:118
    11541150#, php-format
     1151msgid "\"%1$s\" can't be longer than %2$s characters."
     1152msgstr ""
     1153
     1154#. translators: 1: field label, 2: length.
     1155#: includes/configs/strings.php:120
     1156#, php-format
    11551157msgid "\"%1$s\" should be at least %2$s characters long."
    11561158msgstr ""
    11571159
    1158 #: includes/configs/strings.php:121
     1160#: includes/configs/strings.php:123
    11591161msgid "Listing"
    11601162msgstr ""
    11611163
    1162 #: includes/configs/strings.php:122
     1164#: includes/configs/strings.php:124
    11631165msgid "Listings"
    11641166msgstr ""
    11651167
    1166 #: includes/configs/strings.php:123
     1168#: includes/configs/strings.php:125
    11671169msgid "All Listings"
    11681170msgstr ""
    11691171
    1170 #: includes/configs/strings.php:124
     1172#: includes/configs/strings.php:126
    11711173msgid "Related Listings"
    11721174msgstr ""
    11731175
    1174 #: includes/configs/strings.php:125
     1176#: includes/configs/strings.php:127
    11751177msgid "Related Listing Criteria"
    11761178msgstr ""
    11771179
    11781180#. translators: %s: Listings number.
    1179 #: includes/configs/strings.php:127
     1181#: includes/configs/strings.php:129
    11801182#, php-format
    11811183msgid "%s Listing"
    … …  
    11851187
    11861188#. translators: %s: Vendor name.
    1187 #: includes/configs/strings.php:129
     1189#: includes/configs/strings.php:131
    11881190#, php-format
    11891191msgid "Listings by %s"
    11901192msgstr ""
    11911193
    1192 #: includes/configs/strings.php:130
     1194#: includes/configs/strings.php:132
    11931195msgid "Featuring of Listings"
    11941196msgstr ""
    11951197
    1196 #: includes/configs/strings.php:131
     1198#: includes/configs/strings.php:133
    11971199msgid "Featured Listings"
    11981200msgstr ""
    11991201
    1200 #: includes/configs/strings.php:132
     1202#: includes/configs/strings.php:134
    12011203msgid "View Listings"
    12021204msgstr ""
    12031205
    1204 #: includes/configs/strings.php:133
     1206#: includes/configs/strings.php:135
    12051207msgid "Search Listings"
    12061208msgstr ""
    12071209
    1208 #: includes/configs/strings.php:134
     1210#: includes/configs/strings.php:136
    12091211msgid "No listings found."
    12101212msgstr ""
    12111213
    1212 #: includes/configs/strings.php:135
     1214#: includes/configs/strings.php:137
    12131215msgid "Listing Attributes"
    12141216msgstr ""
    12151217
    1216 #: includes/configs/strings.php:136
     1218#: includes/configs/strings.php:138
    12171219msgid "Listing Category"
    12181220msgstr ""
    12191221
    1220 #: includes/configs/strings.php:137
     1222#: includes/configs/strings.php:139
    12211223msgid "Listing Categories"
    12221224msgstr ""
    12231225
    1224 #: includes/configs/strings.php:138
     1226#: includes/configs/strings.php:140
    12251227msgid "Listing Search Form"
    12261228msgstr ""
    12271229
    1228 #: includes/configs/strings.php:139
     1230#: includes/configs/strings.php:141
    12291231msgid "Listing Expiration"
    12301232msgstr ""
    12311233
    1232 #: includes/configs/strings.php:140
     1234#: includes/configs/strings.php:142
    12331235msgid "Submit Listing"
    12341236msgstr ""
    12351237
    1236 #: includes/configs/strings.php:141
     1238#: includes/configs/strings.php:143
    12371239msgid "Renew Listing"
    12381240msgstr ""
    12391241
    1240 #: includes/configs/strings.php:142
     1242#: includes/configs/strings.php:144
    12411243msgid "Add Listing"
    12421244msgstr ""
    12431245
    1244 #: includes/configs/strings.php:143
     1246#: includes/configs/strings.php:145
    12451247msgid "View Listing"
    12461248msgstr ""
    12471249
    1248 #: includes/configs/strings.php:144
     1250#: includes/configs/strings.php:146
    12491251msgid "Edit Listing"
    12501252msgstr ""
    12511253
    1252 #: includes/configs/strings.php:145
     1254#: includes/configs/strings.php:147
    12531255msgid "Delete Listing"
    12541256msgstr ""
    12551257
    1256 #: includes/configs/strings.php:146
     1258#: includes/configs/strings.php:148
    12571259msgid "Report Listing"
    12581260msgstr ""
    12591261
    1260 #: includes/configs/strings.php:147
     1262#: includes/configs/strings.php:149
    12611263msgid "Listing Submitted"
    12621264msgstr ""
    12631265
    1264 #: includes/configs/strings.php:148
     1266#: includes/configs/strings.php:150
    12651267msgid "Listing Approved"
    12661268msgstr ""
    12671269
    1268 #: includes/configs/strings.php:149
     1270#: includes/configs/strings.php:151
    12691271msgid "Listing Rejected"
    12701272msgstr ""
    12711273
    1272 #: includes/configs/strings.php:150
     1274#: includes/configs/strings.php:152
    12731275msgid "Listing Expired"
    12741276msgstr ""
    12751277
    1276 #: includes/configs/strings.php:151
     1278#: includes/configs/strings.php:153
    12771279msgid "Listing Renewed"
    12781280msgstr ""
    12791281
    1280 #: includes/configs/strings.php:152
     1282#: includes/configs/strings.php:154
    12811283msgid "Listing Updated"
    12821284msgstr ""
    12831285
    1284 #: includes/configs/strings.php:153
     1286#: includes/configs/strings.php:155
    12851287msgid "Listing Reported"
    1286 msgstr ""
    1287 
    1288 #. translators: %s: Listing title.
    1289 #: includes/configs/strings.php:155
    1290 #, php-format
    1291 msgid "Thank you! Your listing \"%s\" has been submitted and will be reviewed as soon as possible."
    12921288msgstr ""
    12931289
    … …  
    12951291#: includes/configs/strings.php:157
    12961292#, php-format
     1293msgid "Thank you! Your listing \"%s\" has been submitted and will be reviewed as soon as possible."
     1294msgstr ""
     1295
     1296#. translators: %s: Listing title.
     1297#: includes/configs/strings.php:159
     1298#, php-format
    12971299msgid "Thank you! Your listing \"%s\" has been renewed and will appear at the top of the page."
    12981300msgstr ""
    12991301
    1300 #: includes/configs/strings.php:158
     1302#: includes/configs/strings.php:160
    13011303msgid "Listing has been reported."
    13021304msgstr ""
    13031305
    1304 #: includes/configs/strings.php:159
     1306#: includes/configs/strings.php:161
    13051307msgid "Listings Page"
    13061308msgstr ""
    13071309
    1308 #: includes/configs/strings.php:160
     1310#: includes/configs/strings.php:162
    13091311msgid "Listings Page Display"
    13101312msgstr ""
    13111313
    1312 #: includes/configs/strings.php:161
     1314#: includes/configs/strings.php:163
    13131315msgid "Regular Listings per Page"
    13141316msgstr ""
    13151317
    1316 #: includes/configs/strings.php:162
     1318#: includes/configs/strings.php:164
    13171319msgid "Featured Listings per Page"
    13181320msgstr ""
    13191321
    1320 #: includes/configs/strings.php:163
     1322#: includes/configs/strings.php:165
    13211323msgid "Related Listings per Page"
    13221324msgstr ""
    13231325
    1324 #: includes/configs/strings.php:164
     1326#: includes/configs/strings.php:166
    13251327msgid "Mark this listing as verified"
    13261328msgstr ""
    13271329
    1328 #: includes/configs/strings.php:165
     1330#: includes/configs/strings.php:167
    13291331msgid "Make this listing featured"
    13301332msgstr ""
    13311333
    1332 #: includes/configs/strings.php:166
     1334#: includes/configs/strings.php:168
    13331335msgid "Make listings featured"
    13341336msgstr ""
    13351337
    1336 #: includes/configs/strings.php:167
     1338#: includes/configs/strings.php:169
    13371339msgid "Display only featured listings"
    13381340msgstr ""
    13391341
    1340 #: includes/configs/strings.php:168
     1342#: includes/configs/strings.php:170
    13411343msgid "Display only verified listings"
    13421344msgstr ""
    13431345
    1344 #: includes/configs/strings.php:169
     1346#: includes/configs/strings.php:171
    13451347msgid "Are you sure you want to permanently delete this listing?"
    13461348msgstr ""
    13471349
    1348 #: includes/configs/strings.php:170
     1350#: includes/configs/strings.php:172
    13491351msgid "Manually approve new listings"
    13501352msgstr ""
    13511353
    1352 #: includes/configs/strings.php:171
     1354#: includes/configs/strings.php:173
    13531355msgid "Allow submitting new listings"
    13541356msgstr ""
    13551357
    1356 #: includes/configs/strings.php:172
     1358#: includes/configs/strings.php:174
    13571359msgid "Allow reporting listings"
    13581360msgstr ""
    13591361
    1360 #: includes/configs/strings.php:173
     1362#: includes/configs/strings.php:175
    13611363msgid "Set the number of days after which a listing expires."
    13621364msgstr ""
    13631365
    1364 #: includes/configs/strings.php:174
     1366#: includes/configs/strings.php:176
    13651367msgid "Set the number of days after which an expired listing is deleted."
    13661368msgstr ""
    13671369
    1368 #: includes/configs/strings.php:175
     1370#: includes/configs/strings.php:177
    13691371msgid "Set a date on which the listing will expire."
    13701372msgstr ""
    13711373
    1372 #: includes/configs/strings.php:176
     1374#: includes/configs/strings.php:178
    13731375msgid "Set a date on which the listing will lose featured status."
    13741376msgstr ""
    13751377
    1376 #: includes/configs/strings.php:177
     1378#: includes/configs/strings.php:179
    13771379msgid "Choose a page that displays all listings."
    13781380msgstr ""
    13791381
    1380 #: includes/configs/strings.php:178
     1382#: includes/configs/strings.php:180
    13811383msgid "Choose a page with terms that user has to accept before submitting a new listing."
    13821384msgstr ""
    13831385
    1384 #: includes/configs/strings.php:179
     1386#: includes/configs/strings.php:181
    13851387msgid "Please provide details that will help us verify that this listing violates the terms of service."
    13861388msgstr ""
    13871389
    1388 #: includes/configs/strings.php:180
     1390#: includes/configs/strings.php:182
    13891391msgid "Set the title display format to generate titles based on attributes."
    13901392msgstr ""
    13911393
    1392 #: includes/configs/strings.php:183
     1394#: includes/configs/strings.php:185
    13931395msgid "Vendor"
    13941396msgstr ""
    13951397
    1396 #: includes/configs/strings.php:184
     1398#: includes/configs/strings.php:186
    13971399msgid "View Vendor"
    13981400msgstr ""
    13991401
    1400 #: includes/configs/strings.php:185
     1402#: includes/configs/strings.php:187
    14011403msgid "Add Vendor"
    14021404msgstr ""
    14031405
    1404 #: includes/configs/strings.php:186
     1406#: includes/configs/strings.php:188
    14051407msgid "Edit Vendor"
    14061408msgstr ""
    14071409
    1408 #: includes/configs/strings.php:187
     1410#: includes/configs/strings.php:189
    14091411msgid "Vendors"
    14101412msgstr ""
    14111413
    1412 #: includes/configs/strings.php:188
     1414#: includes/configs/strings.php:190
    14131415msgid "Search Vendors"
    14141416msgstr ""
    14151417
    1416 #: includes/configs/strings.php:189
     1418#: includes/configs/strings.php:191
    14171419msgid "No vendors found."
    14181420msgstr ""
    14191421
    1420 #: includes/configs/strings.php:190
     1422#: includes/configs/strings.php:192
    14211423msgid "Vendor Attributes"
    14221424msgstr ""
    14231425
    1424 #: includes/configs/strings.php:191
     1426#: includes/configs/strings.php:193
    14251427msgid "Vendor Search Form"
    14261428msgstr ""
    14271429
    1428 #: includes/configs/strings.php:192
     1430#: includes/configs/strings.php:194
    14291431msgid "Vendor Registered"
    14301432msgstr ""
    14311433
    1432 #: includes/configs/strings.php:193
     1434#: includes/configs/strings.php:195
    14331435msgid "Vendors Page"
    14341436msgstr ""
    14351437
    1436 #: includes/configs/strings.php:194
     1438#: includes/configs/strings.php:196
    14371439msgid "Vendors per Page"
    14381440msgstr ""
    14391441
    1440 #: includes/configs/strings.php:195
     1442#: includes/configs/strings.php:197
    14411443msgid "Choose a page that displays all vendors."
    14421444msgstr ""
    14431445
    1444 #: includes/configs/strings.php:196
     1446#: includes/configs/strings.php:198
    14451447msgid "Display vendors on the front-end"
    14461448msgstr ""
    14471449
    1448 #: includes/configs/strings.php:197
     1450#: includes/configs/strings.php:199
    14491451msgid "Display only verified vendors"
    14501452msgstr ""
    14511453
    1452 #: includes/configs/strings.php:198
     1454#: includes/configs/strings.php:200
    14531455msgid "Mark this vendor as verified"
    14541456msgstr ""
    14551457
    1456 #: includes/configs/strings.php:201
     1458#: includes/configs/strings.php:203
    14571459msgid "Category"
    14581460msgstr ""
    14591461
    1460 #: includes/configs/strings.php:202
     1462#: includes/configs/strings.php:204
    14611463msgid "Categories"
    14621464msgstr ""
    14631465
    1464 #: includes/configs/strings.php:203
     1466#: includes/configs/strings.php:205
    14651467msgid "All Categories"
    14661468msgstr ""
    14671469
    1468 #: includes/configs/strings.php:204
     1470#: includes/configs/strings.php:206
    14691471msgid "Parent Category"
    14701472msgstr ""
    14711473
    1472 #: includes/configs/strings.php:205
     1474#: includes/configs/strings.php:207
    14731475msgid "Add Category"
    14741476msgstr ""
    14751477
    1476 #: includes/configs/strings.php:206
     1478#: includes/configs/strings.php:208
    14771479msgid "Edit Category"
    14781480msgstr ""
    14791481
    1480 #: includes/configs/strings.php:207
     1482#: includes/configs/strings.php:209
    14811483msgid "Update Category"
    14821484msgstr ""
    14831485
    1484 #: includes/configs/strings.php:208
     1486#: includes/configs/strings.php:210
    14851487msgid "View Category"
    14861488msgstr ""
    14871489
    1488 #: includes/configs/strings.php:209
     1490#: includes/configs/strings.php:211
    14891491msgid "Search Categories"
    14901492msgstr ""
    14911493
    1492 #: includes/configs/strings.php:210
     1494#: includes/configs/strings.php:212
    14931495msgid "No categories found."
    14941496msgstr ""
    14951497
    1496 #: includes/configs/strings.php:211
     1498#: includes/configs/strings.php:213
    14971499msgctxt "imperative"
    14981500msgid "Select Category"
    14991501msgstr ""
    15001502
    1501 #: includes/configs/strings.php:215
     1503#: includes/configs/strings.php:217
    15021504msgid "Attribute"
    15031505msgstr ""
    15041506
    1505 #: includes/configs/strings.php:216
     1507#: includes/configs/strings.php:218
    15061508msgctxt "attribute"
    15071509msgid "Add New"
    15081510msgstr ""
    15091511
    1510 #: includes/configs/strings.php:217
     1512#: includes/configs/strings.php:219
    15111513msgid "Add Attribute"
    15121514msgstr ""
    15131515
    1514 #: includes/configs/strings.php:218
     1516#: includes/configs/strings.php:220
    15151517msgid "Edit Attribute"
    15161518msgstr ""
    15171519
    1518 #: includes/configs/strings.php:219
     1520#: includes/configs/strings.php:221
    15191521msgid "Search Attributes"
    15201522msgstr ""
    15211523
    1522 #: includes/configs/strings.php:220
     1524#: includes/configs/strings.php:222
    15231525msgid "No attributes found."
    15241526msgstr ""
    15251527
    1526 #: includes/configs/strings.php:223
     1528#: includes/configs/strings.php:225
    15271529#: includes/fields/class-attachment-upload.php:64
    15281530msgid "Attachment"
    15291531msgstr ""
    15301532
    1531 #: includes/configs/strings.php:224
     1533#: includes/configs/strings.php:226
    15321534msgid "Attachments"
    15331535msgstr ""
    15341536
    1535 #: includes/configs/strings.php:225
     1537#: includes/configs/strings.php:227
    15361538msgid "Allow file attachments"
    15371539msgstr ""
    15381540
    1539 #: includes/configs/strings.php:226
     1541#: includes/configs/strings.php:228
    15401542msgid "Allow attaching images"
    15411543msgstr ""
    15421544
    1543 #: includes/configs/strings.php:227
     1545#: includes/configs/strings.php:229
    15441546msgid "Allowed File Types"
    15451547msgstr ""
    … …  
    15471549#. translators: %s: files number.
    15481550#: includes/controllers/class-attachment.php:171
    1549 #: includes/fields/class-attachment-upload.php:341
     1551#: includes/fields/class-attachment-upload.php:342
    15501552#, php-format
    15511553msgid "Only up to %s files can be uploaded."
    … …  
    16111613msgstr ""
    16121614
    1613 #: includes/controllers/class-user.php:1014
     1615#. translators: %s: user name.
     1616#: includes/controllers/class-user.php:1015
    16141617#, php-format
    16151618msgid "Profile of %s"
    16161619msgstr ""
    16171620
    1618 #: includes/controllers/class-user.php:1039
     1621#: includes/controllers/class-user.php:1040
    16191622msgid "No users found."
    16201623msgstr ""
    … …  
    17561759msgstr ""
    17571760
    1758 #: includes/fields/class-attachment-upload.php:339
     1761#. translators: %s: file size.
     1762#: includes/fields/class-attachment-upload.php:340
    17591763#, php-format
    17601764msgid "The file size must not exceed %s."
    17611765msgstr ""
    17621766
    1763 #: includes/fields/class-attachment-upload.php:367
    1764 #: includes/fields/class-attachment-upload.php:369
     1767#: includes/fields/class-attachment-upload.php:368
     1768#: includes/fields/class-attachment-upload.php:370
    17651769#: templates/admin/extensions.php:39
    17661770#: templates/admin/themes.php:25
  • hivepress/trunk/readme.txt

    r3732142 r3747070  
    22Contributors: hivepress
    33Tags: business directory, classifieds, directory, directory plugin, listings
    4 Requires at least: 5.0
     4Requires at least: 5.7
    55Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.7.32
     7Stable tag: 1.8.0
    88License: GPLv3
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
    … …  
    140140Moreover, since HivePress is open-source and self-hosted software, unlike SaaS alternatives, you fully own your directory data, which is stored entirely in your website’s database, giving you more control over your data, security, and privacy.
    141141
     142== External services ==
     143
     144This plugin connects to these services only in the following cases:
     145
     146- **HivePress API** – to display notices and HivePress products on dedicated pages in the dashboard, and optionally to send [non-sensitive usage data](https://hivepress.io/usage-tracking/) or deactivation feedback, only if you choose to share them. [Terms of Service](https://hivepress.io/terms-of-service/), [Privacy Policy](https://hivepress.io/privacy-policy/)
     147- **Google APIs** – optionally, to use Google services such as reCAPTCHA, only if the API keys are set or a Google account is connected. [Terms of Service](https://policies.google.com/terms), [Privacy Policy](https://policies.google.com/privacy)
     148
    142149== Frequently Asked Questions ==
    143150
  • hivepress/trunk/templates/email/email-content.php

    r3732142 r3747070  
    55if ( is_rtl() ) :
    66        ?>
    7         <div dir="auto"><?php echo $email->get_body(); ?></div>
     7        <div dir="auto"><?php echo $email->get_body(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Email HTML from the default or admin-edited email template, with token values from data sanitized on save. ?></div>
    88        <?php
    99else :
    10         echo $email->get_body();
     10        echo $email->get_body(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Email HTML from the default or admin-edited email template, with token values from data sanitized on save.
    1111endif;
  • hivepress/trunk/templates/listing-category/view/listing-category-item-count.php

    r2262569 r3747070  
    33defined( 'ABSPATH' ) || exit;
    44?>
    5 <div class="hp-listing-category__item-count hp-listing-category__count"><?php printf( esc_html( translate_nooped_plural( hivepress()->translator->get_string( 'n_listings' ), $listing_category->get_item_count(), 'hivepress' ) ), $listing_category->display_item_count() ); ?></div>
     5<div class="hp-listing-category__item-count hp-listing-category__count"><?php printf( esc_html( translate_nooped_plural( hivepress()->translator->get_string( 'n_listings' ), $listing_category->get_item_count(), 'hivepress' ) ), esc_html( $listing_category->display_item_count() ) ); ?></div>
  • hivepress/trunk/templates/listing/renew/listing-complete-message.php

    r2262578 r3747070  
    33defined( 'ABSPATH' ) || exit;
    44?>
    5 <p><?php printf( esc_html( hivepress()->translator->get_string( 'listing_has_been_renewed' ) ), $listing->get_title() ); ?></p>
     5<p><?php printf( esc_html( hivepress()->translator->get_string( 'listing_has_been_renewed' ) ), esc_html( $listing->get_title() ) ); ?></p>
    66<button type="button" class="button" data-component="link" data-url="<?php echo esc_url( hivepress()->router->get_url( 'user_account_page' ) ); ?>"><?php echo esc_html( hivepress()->translator->get_string( 'return_to_my_account' ) ); ?></button>
  • hivepress/trunk/templates/listing/submit/listing-complete-message.php

    r2233316 r3747070  
    33defined( 'ABSPATH' ) || exit;
    44?>
    5 <p><?php printf( esc_html( hivepress()->translator->get_string( 'listing_has_been_submitted' ) ), $listing->get_title() ); ?></p>
     5<p><?php printf( esc_html( hivepress()->translator->get_string( 'listing_has_been_submitted' ) ), esc_html( $listing->get_title() ) ); ?></p>
    66<button type="button" class="button" data-component="link" data-url="<?php echo esc_url( hivepress()->router->get_url( 'user_account_page' ) ); ?>"><?php echo esc_html( hivepress()->translator->get_string( 'return_to_my_account' ) ); ?></button>
  • hivepress/trunk/templates/listing/view/listing-created-date.php

    r2466657 r3747070  
    44?>
    55<time class="hp-listing__created-date hp-listing__date hp-meta" datetime="<?php echo esc_attr( $listing->get_created_date() ); ?>">
    6         <?php printf( hivepress()->translator->get_string( 'added_on_date' ), $listing->display_created_date() ); ?>
     6        <?php printf( esc_html( hivepress()->translator->get_string( 'added_on_date' ) ), esc_html( $listing->display_created_date() ) ); ?>
    77</time>
  • hivepress/trunk/templates/listing/view/page/listing-description.php

    r2282019 r3747070  
    55if ( $listing->get_description() ) :
    66        ?>
    7         <div class="hp-listing__description"><?php echo $listing->display_description(); ?></div>
     7        <div class="hp-listing__description"><?php echo $listing->display_description(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Sanitized on save (HTML is stripped in front-end forms and filtered by WordPress in the back-end), then formatted by the_content filter like post content. ?></div>
    88        <?php
    99endif;
  • hivepress/trunk/templates/page/page-description.php

    r2706461 r3747070  
    66        ?>
    77        <div class="hp-page__description">
    8                 <?php echo $page_description; ?>
     8                <?php echo $page_description; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Term description sanitized by WordPress on save, then formatted by the_content filter like post content. ?>
    99        </div>
    1010        <?php
  • hivepress/trunk/templates/user/view/page/user-description.php

    r2869522 r3747070  
    55if ( $user->get_description() ) :
    66        ?>
    7         <div class="hp-vendor__description"><?php echo $user->display_description(); ?></div>
     7        <div class="hp-vendor__description"><?php echo $user->display_description(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- User text escaped with esc_html(), then formatted by the_content filter like post content. ?></div>
    88        <?php
    99endif;
  • hivepress/trunk/templates/user/view/user-registered-date.php

    r2466657 r3747070  
    66        <?php
    77        /* translators: %s: date. */
    8         printf( esc_html__( 'Member since %s', 'hivepress' ), $user->display_registered_date() );
     8        printf( esc_html__( 'Member since %s', 'hivepress' ), esc_html( $user->display_registered_date() ) );
    99        ?>
    1010</time>
  • hivepress/trunk/templates/vendor/view/page/vendor-description.php

    r2282019 r3747070  
    55if ( $vendor->get_description() ) :
    66        ?>
    7         <div class="hp-vendor__description"><?php echo $vendor->display_description(); ?></div>
     7        <div class="hp-vendor__description"><?php echo $vendor->display_description(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Sanitized on save (HTML is stripped in front-end forms and filtered by WordPress in the back-end), then formatted by the_content filter like post content. ?></div>
    88        <?php
    99endif;
  • hivepress/trunk/templates/vendor/view/vendor-registered-date.php

    r2466657 r3747070  
    66        <?php
    77        /* translators: %s: date. */
    8         printf( esc_html__( 'Member since %s', 'hivepress' ), $vendor->display_registered_date() );
     8        printf( esc_html__( 'Member since %s', 'hivepress' ), esc_html( $vendor->display_registered_date() ) );
    99        ?>
    1010</time>
  • hivepress/trunk/templates/woocommerce/myaccount/my-account.php

    r2233316 r3747070  
    33defined( 'ABSPATH' ) || exit;
    44
    5 echo ( new HivePress\Blocks\Template( [ 'template' => 'user_account_page' ] ) )->render();
     5echo ( new HivePress\Blocks\Template( [ 'template' => 'user_account_page' ] ) )->render(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Block HTML, blocks escape their own output.
  • hivepress/trunk/uninstall.php

    r2233316 r3747070  
    77
    88// Exit if accessed directly.
    9 defined( 'ABSPATH' ) || exit;
     9defined( 'WP_UNINSTALL_PLUGIN' ) || exit;
     10
     11// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Bulk removal of all HivePress data on uninstall, there is no API for this and nothing to cache.
    1012
    1113global $wpdb;
    … …  
    4648        $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_timeout\_hp\_%';" );
    4749
    48         $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE option_name LIKE '\_transient\_hp\_%';" );
    49         $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE option_name LIKE '\_transient\_timeout\_hp\_%';" );
     50        $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE '\_transient\_hp\_%';" );
     51        $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE '\_transient\_timeout\_hp\_%';" );
    5052
    51         $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE option_name LIKE '\_transient\_hp\_%';" );
    52         $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE option_name LIKE '\_transient\_timeout\_hp\_%';" );
     53        $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '\_transient\_hp\_%';" );
     54        $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '\_transient\_timeout\_hp\_%';" );
    5355
    54         $wpdb->query( "DELETE FROM {$wpdb->termmeta} WHERE option_name LIKE '\_transient\_hp\_%';" );
    55         $wpdb->query( "DELETE FROM {$wpdb->termmeta} WHERE option_name LIKE '\_transient\_timeout\_hp\_%';" );
     56        $wpdb->query( "DELETE FROM {$wpdb->termmeta} WHERE meta_key LIKE '\_transient\_hp\_%';" );
     57        $wpdb->query( "DELETE FROM {$wpdb->termmeta} WHERE meta_key LIKE '\_transient\_timeout\_hp\_%';" );
    5658
    57         $wpdb->query( "DELETE FROM {$wpdb->commentmeta} WHERE option_name LIKE '\_transient\_hp\_%';" );
    58         $wpdb->query( "DELETE FROM {$wpdb->commentmeta} WHERE option_name LIKE '\_transient\_timeout\_hp\_%';" );
     59        $wpdb->query( "DELETE FROM {$wpdb->commentmeta} WHERE meta_key LIKE '\_transient\_hp\_%';" );
     60        $wpdb->query( "DELETE FROM {$wpdb->commentmeta} WHERE meta_key LIKE '\_transient\_timeout\_hp\_%';" );
    5961
    6062        // Flush cache.
    6163        wp_cache_flush();
    6264}
     65
     66// phpcs:enable
  • hivepress/trunk/vendor/composer/installed.php

    r3732142 r3747070  
    22    'root' => array(
    33        'name' => '__root__',
    4         'pretty_version' => '1.7.32',
    5         'version' => '1.7.32.0',
    6         'reference' => 'bc3ad70bec7562be01641f8aecd0d6d499f5620a',
     4        'pretty_version' => '1.8.0',
     5        'version' => '1.8.0.0',
     6        'reference' => '2dfeebbaa39c10e7087fe3d5bda332b0d5aa9fc0',
    77        'type' => 'library',
    88        'install_path' => __DIR__ . '/../../',
    … …  
    1212    'versions' => array(
    1313        '__root__' => array(
    14             'pretty_version' => '1.7.32',
    15             'version' => '1.7.32.0',
    16             'reference' => 'bc3ad70bec7562be01641f8aecd0d6d499f5620a',
     14            'pretty_version' => '1.8.0',
     15            'version' => '1.8.0.0',
     16            'reference' => '2dfeebbaa39c10e7087fe3d5bda332b0d5aa9fc0',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.