Skip to content

Instantly share code, notes, and snippets.

@marcusig
marcusig / remove-html-from-admin-config.php
Created December 12, 2022 12:59
Product Configurator: Remove HTML from the Admin order configuration
<?php
// Strip the HTML from the configuration
add_filter( 'woocommerce_order_item_get_formatted_meta_data', function( $formatted_meta, $order_item ) {
// Handle "dynamic data" orders
foreach( $formatted_meta as $index => $meta ) {
if ( property_exists( $meta, 'value' ) && strpos( $meta->value, 'order-configuration' ) && function_exists( 'mkl_pc' ) && mkl_pc( 'admin' ) ) {
$meta->value = str_replace( '<div', "\n\r<div", $meta->value );
$meta->value = trim( strip_tags( $meta->value ) );
$formatted_meta[$index] = $meta;
@marcusig
marcusig / execute-shortcodes-on-description.php
Created October 29, 2022 15:15
Execute shortcodes found in the description fields, by applying the WP filter 'the_content'
<?php
add_filter( 'mkl_product_configurator_get_front_end_data', function( $data ) {
// Filter the choices
if ( isset( $data['content'] ) && is_array( $data['content'] ) ) {
foreach( $data['content'] as $lin => $layer ) {
foreach( $layer['choices'] as $cin => $choice ) {
if ( isset( $choice['description'] ) ) {
$data['content'][$lin]['choices'][$cin]['description'] = apply_filters( 'the_content', $choice['description'] );
}
@marcusig
marcusig / bulk-increase-prices.js
Created October 28, 2022 15:28
Increase the prices in bulk, in the Bulk price edit screen
var factor = 1.05;
var round = true;
jQuery( '.bulk-choice input.extra-price' ).each( function( ind, item ) {
if ( ! jQuery( item ).val() ) return;
var value = jQuery( item ).val() * factor;
if ( round ) value = Math.round( value );
jQuery( item ).val( value ).trigger( 'change' );
});
@marcusig
marcusig / remove-html-from-config-export.php
Last active November 8, 2022 08:55
Remove HTML from the configuration export, and add the image link
<?php
// Trip the HTML from the configuration
add_filter( 'woe_get_order_product_value_Configuration', function( $value, $order, $item ) {
// Handle "dynamic data" orders
if ( strpos( $value, 'order-configuration-details' ) && function_exists( 'mkl_pc' ) && mkl_pc( 'admin' ) ) {
$meta = new stdClass();
$meta->value = $value;
$value = mkl_pc( 'admin' )->order->format_meta( $value, $meta, $item );
}
@marcusig
marcusig / make-everything-scroll-on-mobile.css
Created October 20, 2022 11:31
[Configurator] Make everything scroll on mobile
@media (max-width: 660px) {
.mkl_pc.opened .mkl_pc_container {
overflow: auto;
bottom: 4em;
}
.mkl_pc.opened .mkl_pc_container .mkl_pc_viewer {
position: relative;
height: calc(50vh - 60px);
bottom: auto;
top: 0;
@marcusig
marcusig / filter-order-meta-for-rest-api.php
Last active October 26, 2022 12:17
Filter the rest api result when exporting orders, replacing the meta value by display_value, which stores the readable data.
<?php
add_filter( "woocommerce_rest_prepare_shop_order_object", function( $response, $object, $request ) {
foreach( $response->data['line_items'] as $ind => $item ) {
foreach( $item['meta_data'] as $md_ind => $meta_data ) {
// If the value contains order-configuration-details
if ( strpos( $meta_data['value'], 'order-configuration-details' ) ) {
// then replace the value by display_value
$response->data['line_items'][$ind]['meta_data'][$md_ind]['value'] = $meta_data['display_value'];
}
@marcusig
marcusig / change-tooltip-duration.js
Last active August 23, 2022 11:07
[configurator] Change tooltip duration / delay
// Change the tooltip. See the available options on https://atomiks.github.io/tippyjs/v6/all-props/#duration
wp.hooks.addFilter( 'PC.fe.tooltip.options', 'myDomain', function( options ) {
options.duration = [100, 400];
return options;
} );
@marcusig
marcusig / add-html-support-to-layer-name.php
Created August 23, 2022 10:11
[Configurator] add html support to layer name
<?php
// Add the new label, with html support: {{{ instead of {{
function my_prefix_frontend_configurator_layer_name() {
?>
<span class="text layer-name">{{{data.name}}}</span>
<?php
}
add_action( 'tmpl-mkl-pc-configurator-layer-item-button', 'my_prefix_frontend_configurator_layer_name', 10 );
@marcusig
marcusig / dark-mode-cross-to-arrow.css
Created August 4, 2022 06:35
Change the active layer close icon from a cross to an arrow
.mkl_pc .mkl_pc_container .mkl_pc_toolbar section.choices .layer_choices li.layer-choices-title > span a.close::before,
.mkl_pc .mkl_pc_container .mkl_pc_toolbar section.choices .layer_choices li.layer-choices-title > span a.close::after {
width: 15px;
transform-origin: 100%;
}
.mkl_pc .mkl_pc_container .mkl_pc_toolbar section.choices .layer_choices li.layer-choices-title > span a.close::after {
transform: translateX(8px) rotate(35deg);
}
@marcusig
marcusig / gtranslate-pro-editor-filter.php
Created July 29, 2022 14:34
Gtranslate Pro editor filter for the product configurator
<?php
add_filter( 'mkl_pc_get_configurator_data_js_output', function( $js, $id, $data ) {
if ( class_exists( 'GTranslate' ) && is_user_logged_in() && current_user_can( 'edit_posts' ) ) {
$output = 'var PC = PC || {};'."\n";
$output .= 'PC.productData = PC.productData || {};'."\n";
// Add compatibility with GTranslate premium, enabling users to manually update translations.
$output .= "fetch('/wp-admin/admin-ajax.php?action=pc_get_data&data=init&fe=".$_REQUEST['fe']."&id={$id}&ver=".time()."').then(r => r.json()).then(data => {PC.productData.prod_$id = data;});";
return $output;
}