*/
namespace StorePlugin\CustomOrderStatus\WcOrderStatus;
use StorePlugin\CustomOrderStatus\Contracts\ServiceInterface;
/**
* AbstractRegisterOrderStatus
*
* The order status registration functionality
*/
class RegisterOrderStatus implements ServiceInterface {
public function register(): void
{
\add_action( 'init', [$this, 'registerCustomStatuses'] );
\add_filter( 'wc_order_statuses', [$this, 'mergeOrderStatuses'] );
}
/**
* Get custom order statuses
*
* @return array
*/
protected function getCustomOrderStatus() {
$custom_statuses = get_posts(array(
'post_type' => 'wc_order_status',
'post_status' => 'publish',
'posts_per_page' => -1,
));
return $custom_statuses;
}
/**
* Register a status
*
* @return void
*/
public function registerCustomStatuses() {
$custom_statuses = $this->getCustomOrderStatus();
if( is_array( $custom_statuses ) ) {
foreach( $custom_statuses as $custom_status ) {
register_post_status($custom_status->post_name, array(
'label' => $custom_status->post_title,
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( $custom_status->post_title . ' (%s)', $custom_status->post_title . ' (%s)' ) // phpcs:ignore
));
}
}
}
/**
* Merge registered order status
*
* @param array $statuses
* @return array
*/
public function mergeOrderStatuses( $statuses ) {
if( empty( $statuses ) ) return array();
$custom_statuses = $this->getCustomOrderStatus();
if( is_array( $custom_statuses ) ) {
foreach( $custom_statuses as $custom_status ) {
$statuses[$custom_status->post_name] = $custom_status->post_title;
}
}
return $statuses;
}
}