Contact tab, so site owners
* don't have to retype them for every product.
*/
defined( 'ABSPATH' ) || exit;
class AumNexCart_Meta_Boxes {
const NONCE_NAME = 'aumnexcart_meta_nonce';
const NONCE_ACTION = 'aumnexcart_meta_save';
public function __construct() {
add_action( 'add_meta_boxes', array( $this, 'register' ) );
add_action( 'save_post_' . AumNexCart_Post_Type::POST_TYPE, array( $this, 'save' ), 10, 2 );
}
/**
* Registers the four meta boxes on the product edit screen.
*/
public function register() {
$pt = AumNexCart_Post_Type::POST_TYPE;
add_meta_box( 'aumnexcart-media', __( 'Media Gallery', 'aumnexcart' ), array( $this, 'render_media' ), $pt, 'normal', 'high' );
add_meta_box( 'aumnexcart-price', __( 'Price', 'aumnexcart' ), array( $this, 'render_price' ), $pt, 'side', 'default' );
add_meta_box( 'aumnexcart-attributes', __( 'Product Attributes', 'aumnexcart' ), array( $this, 'render_attributes' ), $pt, 'normal', 'default' );
add_meta_box( 'aumnexcart-contact', __( 'Contact Actions', 'aumnexcart' ), array( $this, 'render_contact' ), $pt, 'normal', 'default' );
}
/* ----------------------------------------------------------------
* Media meta box
* ---------------------------------------------------------------- */
public function render_media( $post ) {
wp_nonce_field( self::NONCE_ACTION, self::NONCE_NAME );
$items = AumNexCart_Meta::get_media( $post->ID );
?>
ID );
$type = $data['type'];
$global_currency = AumNexCart_Settings::get( 'currency_symbol', '$' );
?>
ID );
$filterable = AumNexCart_Settings::get( 'filterable_attributes', array() );
$filter_label = ! empty( $filterable )
? sprintf(
/* translators: %s: comma-separated list of filterable attribute keys */
__( 'Filterable keys (from Settings): %s', 'aumnexcart' ),
implode( ', ', $filterable )
)
: __( 'No filterable keys configured. Add some under AumNexCart > Settings > Filter.', 'aumnexcart' );
?>
ID );
/* Pre-fill from defaults when creating a brand-new product
* with no contact rows saved yet. The auto-draft check makes
* sure we don't overwrite a deliberate "no actions" state on
* an existing product. */
if ( empty( $rows ) && 'auto-draft' === $post->post_status ) {
$defaults = AumNexCart_Settings::get( 'default_contact', array() );
foreach ( $defaults as $row ) {
$item = AumNexCart_Meta::normalize_contact_row( $row );
if ( $item ) {
$rows[] = $item;
}
}
}
?>
>
>
>
isset( $_POST['aumnexcart_price_type'] ) ? sanitize_text_field( wp_unslash( $_POST['aumnexcart_price_type'] ) ) : 'hidden',
'min' => isset( $_POST['aumnexcart_price_min'] ) ? sanitize_text_field( wp_unslash( $_POST['aumnexcart_price_min'] ) ) : '',
'max' => isset( $_POST['aumnexcart_price_max'] ) ? sanitize_text_field( wp_unslash( $_POST['aumnexcart_price_max'] ) ) : '',
'currency' => isset( $_POST['aumnexcart_price_currency'] ) ? sanitize_text_field( wp_unslash( $_POST['aumnexcart_price_currency'] ) ) : '',
'text' => isset( $_POST['aumnexcart_price_text'] ) ? sanitize_text_field( wp_unslash( $_POST['aumnexcart_price_text'] ) ) : '',
);
AumNexCart_Meta::save_price( $post_id, $price );
/* Attributes */
$attrs = isset( $_POST['aumnexcart_attributes'] ) && is_array( $_POST['aumnexcart_attributes'] )
? map_deep( wp_unslash( $_POST['aumnexcart_attributes'] ), 'sanitize_text_field' )
: array();
AumNexCart_Meta::save_attributes( $post_id, $attrs );
/* Contact */
$contact = isset( $_POST['aumnexcart_contact'] ) && is_array( $_POST['aumnexcart_contact'] )
? map_deep( wp_unslash( $_POST['aumnexcart_contact'] ), 'sanitize_text_field' )
: array();
AumNexCart_Meta::save_contact( $post_id, $contact );
}
}