Commit 62bd29757cd for woocommerce
commit 62bd29757cd4cf15e5af6f54496f0ce6dafa2932
Author: Poli Gilad <83961704+poligilad-auto@users.noreply.github.com>
Date: Thu Jul 2 10:11:11 2026 +0200
Update WooCommerce catalog visibility publish panel layout (#66080)
* Update product publish panel layout
* Add changelog for publish panel layout
* Fix publish panel priority test cleanup
* Address publish panel review feedback
diff --git a/plugins/woocommerce/changelog/update-product-publish-panel-catalog-visibility b/plugins/woocommerce/changelog/update-product-publish-panel-catalog-visibility
new file mode 100644
index 00000000000..f8e14207897
--- /dev/null
+++ b/plugins/woocommerce/changelog/update-product-publish-panel-catalog-visibility
@@ -0,0 +1,4 @@
+Significance: patch
+Type: update
+
+Update product publish panel catalog visibility layout and extension row ordering.
diff --git a/plugins/woocommerce/client/legacy/css/admin.scss b/plugins/woocommerce/client/legacy/css/admin.scss
index ae8f08fe302..98f6eb67164 100644
--- a/plugins/woocommerce/client/legacy/css/admin.scss
+++ b/plugins/woocommerce/client/legacy/css/admin.scss
@@ -8738,6 +8738,121 @@ table.bar_chart {
}
}
+ // Align the product description editor with the meta boxes below it.
+ // #normal-sortables adds 4px of padding around postboxes, which #post-body-content
+ // doesn't, so the description editor ends up 8px wider than neighbouring postboxes
+ // on WP 7.0 (where the radius makes the misalignment visible).
+ &.post-type-product #postdivrich.woocommerce-product-description {
+ margin-left: 4px;
+ margin-right: 4px;
+ }
+
+ &.post-type-product #submitdiv {
+ --wc-product-publish-spacing-1: var(--wp-admin-grid-unit-05, 4px);
+ --wc-product-publish-spacing-2: var(--wp-admin-grid-unit-10, 8px);
+ --wc-product-publish-icon-size: 20px;
+ --wc-product-publish-row-horizontal-padding: 10px;
+ --wc-product-publish-summary-row-offset: calc(
+ var(--wc-product-publish-icon-size) +
+ 6px
+ );
+ --wc-product-publish-panel-offset: calc(
+ var(--wc-product-publish-icon-size) +
+ 5px
+ );
+
+ .misc-pub-catalog-visibility {
+ padding-left: calc(
+ var(--wc-product-publish-row-horizontal-padding) +
+ var(--wc-product-publish-summary-row-offset)
+ );
+ position: relative;
+ }
+
+ .misc-pub-catalog-visibility::before {
+ color: currentColor;
+ content: "\f180";
+ content: "\f180" / "";
+ display: inline-block;
+ font: normal 20px/1 dashicons;
+ left: calc(var(--wc-product-publish-row-horizontal-padding) - 1px);
+ position: absolute;
+ speak: never;
+ top: calc(var(--wc-product-publish-spacing-2) - 2px);
+ vertical-align: top;
+ width: var(--wc-product-publish-icon-size);
+ }
+
+ #catalog-visibility-select {
+ margin-left: calc(-1 * var(--wc-product-publish-panel-offset));
+ width: calc(100% + var(--wc-product-publish-panel-offset));
+ }
+
+ #catalog-visibility-select > p:first-of-type {
+ color: $wp-admin-icon-gray;
+ margin: var(--wc-product-publish-spacing-1) 0
+ var(--wc-product-publish-spacing-2);
+ }
+
+ #catalog-visibility-select input[type="radio"],
+ #catalog-visibility-select input[type="checkbox"] {
+ margin: 0 var(--wc-product-publish-spacing-1)
+ var(--wc-product-publish-spacing-1) 0;
+ vertical-align: text-top;
+ }
+
+ #catalog-visibility-select #_featured,
+ #catalog-visibility-select label[for="_featured"] {
+ position: relative;
+ top: calc(
+ var(--wc-product-publish-spacing-2) -
+ 5px
+ );
+ }
+
+ #catalog-visibility-select label.selectit,
+ #catalog-visibility-select label[for="_featured"] {
+ display: inline-block;
+ line-height: 1.5;
+ max-width: calc(100% - 28px);
+ }
+
+ #catalog-visibility-select > p:last-child {
+ align-items: center;
+ display: flex;
+ gap: var(--wc-product-publish-spacing-2);
+ margin: var(--wc-product-publish-spacing-2) 0 0;
+ }
+
+ @media screen and (max-width: 782px) {
+ .misc-pub-catalog-visibility::before {
+ top: calc(var(--wc-product-publish-spacing-2) + 3px);
+ }
+
+ #catalog-visibility-select input[type="radio"],
+ #catalog-visibility-select input[type="checkbox"] {
+ margin: calc(-1 * var(--wc-product-publish-spacing-1))
+ var(--wc-product-publish-spacing-1) 0 0;
+ vertical-align: middle;
+ }
+
+ #catalog-visibility-select label.selectit,
+ #catalog-visibility-select label[for="_featured"] {
+ display: inline;
+ line-height: 280%;
+ }
+
+ #catalog-visibility-select > p:last-child {
+ display: block;
+ }
+
+ #catalog-visibility-select #_featured,
+ #catalog-visibility-select label[for="_featured"] {
+ top: 0;
+ }
+ }
+ }
+
// Shipping zone name input: ID selector in the base rule outranks the form-table override above.
.wc-shipping-zone-settings #zone_name {
padding: 0 12px;
diff --git a/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php b/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php
index e669b308314..31d8ba95c94 100644
--- a/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php
+++ b/plugins/woocommerce/includes/admin/class-wc-admin-post-types.php
@@ -61,7 +61,7 @@ class WC_Admin_Post_Types {
add_filter( 'enter_title_here', array( $this, 'enter_title_here' ), 1, 2 );
add_action( 'edit_form_after_title', array( $this, 'edit_form_after_title' ) );
add_filter( 'default_hidden_meta_boxes', array( $this, 'hidden_meta_boxes' ), 10, 2 );
- add_action( 'post_submitbox_misc_actions', array( $this, 'product_data_visibility' ) );
+ add_action( 'post_submitbox_misc_actions', array( $this, 'product_data_visibility' ), 5 );
include_once __DIR__ . '/class-wc-admin-upload-downloadable-product.php';
@@ -754,7 +754,7 @@ class WC_Admin_Post_Types {
$current_featured = wc_bool_to_string( $product_object->get_featured() );
$visibility_options = wc_get_product_visibility_options();
?>
- <div class="misc-pub-section" id="catalog-visibility">
+ <div class="misc-pub-section misc-pub-catalog-visibility" id="catalog-visibility">
<?php esc_html_e( 'Catalog visibility:', 'woocommerce' ); ?>
<strong id="catalog-visibility-display">
<?php
@@ -781,7 +781,7 @@ class WC_Admin_Post_Types {
echo '<input type="radio" name="_visibility" id="_visibility_' . esc_attr( $name ) . '" value="' . esc_attr( $name ) . '" ' . checked( $current_visibility, $name, false ) . ' data-label="' . esc_attr( $label ) . '" /> <label for="_visibility_' . esc_attr( $name ) . '" class="selectit">' . esc_html( $label ) . '</label><br />';
}
- echo '<br /><input type="checkbox" name="_featured" id="_featured" ' . checked( $current_featured, 'yes', false ) . ' /> <label for="_featured">' . esc_html__( 'This is a featured product', 'woocommerce' ) . '</label><br />';
+ echo '<input type="checkbox" name="_featured" id="_featured" ' . checked( $current_featured, 'yes', false ) . ' /> <label for="_featured">' . esc_html__( 'This is a featured product', 'woocommerce' ) . '</label><br />';
?>
<p>
<a href="#catalog-visibility" class="save-post-visibility hide-if-no-js button"><?php esc_html_e( 'OK', 'woocommerce' ); ?></a>