クラス
Item
ソース ソース
ファイル: src/Admin/Pages/Item/Item.php
class Item
{
const SCRIPT_SLUG = 'wcexics-admin-item';
/**
* Master object
*
* @var Master
*/
private $master;
/**
* Injects `Master`
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param Master $master
* @return void
*/
public function __construct(Master $master) {
$this->master = $master;
}
/**
* Registers hooks
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
public function init() {
add_filter('usces_item_master_first_section', [$this, 'delegateAssetsLoad'], 11, 2);
add_filter('usces_filter_sku_meta_row', [get_class(), 'addComboApp'], 10, 2);
}
/**
* Delegates to load method
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param null $null
* @param int $post_id
* @return void
*/
public function delegateAssetsLoad($null, $post_id) {
$this->load($post_id);
}
/**
* Loads settings page assets
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param int $post_id
* @return void
*/
public function load($post_id) {
// scripts
wp_enqueue_script('jquery-ui-sortable');
$assetsmap = include(WCEXICS_DIST_JS_DIR . '/Admin/Pages/Item/App.asset.php');
wp_enqueue_script(
self::SCRIPT_SLUG,
WCEXICS_DIST_JS_URL . '/Admin/Pages/Item/App.js',
array_merge($assetsmap['dependencies'], ['jquery-ui-sortable']),
$assetsmap['version'],
true
);
Snackbar::load([self::SCRIPT_SLUG]);
// styles
Loader::loadCoreCss();
/**
* It's unclear how you are supposed to load the admin theme for components that are used
* outside of the block editor... so we just load the `wp-block-editor` styles so that the
* admin theme is correctly applied to our components.
*
* IS THERE NO WAY TO DO THIS GUTENBERG???
*/
wp_enqueue_style('wp-block-editor');
wp_enqueue_style('wp-components');
wp_enqueue_style(
self::SCRIPT_SLUG,
WCEXICS_PLUGIN_URL . '/src/Admin/Pages/Item/combo-set-app.css',
[],
WCEXICS_VERSION
);
// injections
wp_set_script_translations(self::SCRIPT_SLUG, 'wcexics', WCEXICS_LANG_DIR);
wp_localize_script(
self::SCRIPT_SLUG,
'wcexics',
array_merge(
[
'multiSelectText' => __('Multi-select', 'usces'),
'requiredText' => __('Required', 'usces'),
'skuCodeText' => __('SKU code', 'usces'),
'skuDisplayNameText' => __('SKU display name ', 'usces'),
'currencySymbol' => __('dollars', 'usces'),
'welitems' => Utils::getAllPublishedWelcartItems(),
'combos' => API\ComboSet::getAllComboSetsForPostId($post_id),
'postId' => $post_id,
'domElements' => DomElementIdentifiers::getConstantsMap(),
],
$this->master->getScriptInjectionVariables()
)
);
}
/**
* Adds item combo registration React app
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param string $extras
* @param array $sku
* @return string
*/
public static function addComboApp($extras, $sku) {
ob_start();
?>
<tr>
<td
class="td_<?php echo esc_attr(Master::REACT_DOM_NODE); ?>"
id="td_<?php echo esc_attr(Master::REACT_DOM_NODE . '_' . $sku['meta_id']); ?>"
colspan="5"
>
<div
class="<?php echo esc_attr(Master::REACT_DOM_NODE); ?>"
id="<?php echo esc_attr(Master::REACT_DOM_NODE . '_' . $sku['meta_id']); ?>"
data-sku-meta-id="<?php echo esc_attr($sku['meta_id']); ?>"
></div>
</td>
</tr>
<?php
$react = ob_get_clean();
return $extras . $react;
}
}
- __construct — Injects `Master`
- addComboApp — Adds item combo registration React app
- delegateAssetsLoad — Delegates to load method
- init — Registers hooks
- load — Loads settings page assets