WC_Admin_Attributes::add_attribute()public staticWC 1.0

Add Attribute admin panel.

Shows the interface for adding new attributes.

Метод класса: WC_Admin_Attributes{}

Возвращает

null. Ничего (null).

Использование

$result = WC_Admin_Attributes::add_attribute();

Код WC_Admin_Attributes::add_attribute() WC 8.7.0

<?php
public static function add_attribute() {
	?>
	<div class="wrap woocommerce">
		<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>

		<br class="clear" />
		<div id="col-container">
			<div id="col-right">
				<div class="col-wrap">
					<table class="widefat attributes-table wp-list-table ui-sortable" style="width:100%">
						<thead>
							<tr>
								<th scope="col"><?php esc_html_e( 'Name', 'woocommerce' ); ?></th>
								<th scope="col"><?php esc_html_e( 'Slug', 'woocommerce' ); ?></th>
								<?php if ( wc_has_custom_attribute_types() ) : ?>
									<th scope="col"><?php esc_html_e( 'Type', 'woocommerce' ); ?></th>
								<?php endif; ?>
								<th scope="col"><?php esc_html_e( 'Order by', 'woocommerce' ); ?></th>
								<th scope="col"><?php esc_html_e( 'Terms', 'woocommerce' ); ?></th>
							</tr>
						</thead>
						<tbody>
							<?php
							$attribute_taxonomies = wc_get_attribute_taxonomies();
							if ( $attribute_taxonomies ) {
								/**
								 * Filters the maximum number of terms that will be displayed for each taxonomy in the Attributes page.
								 *
								 * @param int @default_max_terms_to_display Default value.
								 * @returns int Actual value to use, may be zero.
								 *
								 * @since 6.9.0
								 */
								$max_terms_to_display = apply_filters( 'woocommerce_max_terms_displayed_in_attributes_page', 100 );
								foreach ( $attribute_taxonomies as $tax ) :
									?>
									<tr>
											<td>
												<strong><a href="edit-tags.php?taxonomy=<?php echo esc_attr( wc_attribute_taxonomy_name( $tax->attribute_name ) ); ?>&amp;post_type=product"><?php echo esc_html( $tax->attribute_label ); ?></a></strong>

												<div class="row-actions"><span class="edit"><a href="<?php echo esc_url( add_query_arg( 'edit', $tax->attribute_id, 'edit.php?post_type=product&amp;page=product_attributes' ) ); ?>"><?php esc_html_e( 'Edit', 'woocommerce' ); ?></a> | </span><span class="delete"><a class="delete" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'delete', $tax->attribute_id, 'edit.php?post_type=product&amp;page=product_attributes' ), 'woocommerce-delete-attribute_' . $tax->attribute_id ) ); ?>"><?php esc_html_e( 'Delete', 'woocommerce' ); ?></a></span></div>
											</td>
											<td><?php echo esc_html( $tax->attribute_name ); ?></td>
											<?php if ( wc_has_custom_attribute_types() ) : ?>
												<td><?php echo esc_html( wc_get_attribute_type_label( $tax->attribute_type ) ); ?> <?php echo $tax->attribute_public ? esc_html__( '(Public)', 'woocommerce' ) : ''; ?></td>
											<?php endif; ?>
											<td>
												<?php
												switch ( $tax->attribute_orderby ) {
													case 'name':
														esc_html_e( 'Name', 'woocommerce' );
														break;
													case 'name_num':
														esc_html_e( 'Name (numeric)', 'woocommerce' );
														break;
													case 'id':
														esc_html_e( 'Term ID', 'woocommerce' );
														break;
													default:
														esc_html_e( 'Custom ordering', 'woocommerce' );
														break;
												}
												?>
											</td>
											<td class="attribute-terms">
												<?php
												$taxonomy = wc_attribute_taxonomy_name( $tax->attribute_name );

												if ( taxonomy_exists( $taxonomy ) ) {
													$total_count = (int) get_terms(
														array(
															'taxonomy'   => $taxonomy,
															'fields'     => 'count',
															'hide_empty' => false,
														)
													);
													if ( 0 === $total_count ) {
														echo '<span class="na">&ndash;</span>';
													} elseif ( $max_terms_to_display > 0 ) {
														$terms        = get_terms(
															array(
																'taxonomy'   => $taxonomy,
																'number'     => $max_terms_to_display,
																'fields'     => 'names',
																'hide_empty' => false,
															)
														);
														$terms_string = implode( ', ', $terms );
														if ( $total_count > $max_terms_to_display ) {
															$remaining = $total_count - $max_terms_to_display;
															/* translators: 1: Comma-separated terms list, 2: how many terms are hidden */
															$terms_string = sprintf( __( '%1$s... (%2$s more)', 'woocommerce' ), $terms_string, $remaining );
														}
														echo esc_html( $terms_string );
													} elseif ( 1 === $total_count ) {
														echo esc_html( __( '1 term', 'woocommerce' ) );
													} else {
														/* translators: %s: Total count of terms available for the attribute */
														echo esc_html( sprintf( __( '%s terms', 'woocommerce' ), $total_count ) );
													}
												} else {
														echo '<span class="na">&ndash;</span><br />';
												}
												?>
												<br /><a href="edit-tags.php?taxonomy=<?php echo esc_attr( wc_attribute_taxonomy_name( $tax->attribute_name ) ); ?>&amp;post_type=product" class="configure-terms"><?php esc_html_e( 'Configure terms', 'woocommerce' ); ?></a>
											</td>
										</tr>
										<?php
									endforeach;
							} else {
								?>
									<tr>
										<td colspan="6"><?php esc_html_e( 'No attributes currently exist.', 'woocommerce' ); ?></td>
									</tr>
									<?php
							}
							?>
						</tbody>
					</table>
				</div>
			</div>
			<div id="col-left">
				<div class="col-wrap">
					<div class="form-wrap">
						<h2><?php esc_html_e( 'Add new attribute', 'woocommerce' ); ?></h2>
						<p><?php esc_html_e( 'Attributes let you define extra product data, such as size or color. You can use these attributes in the shop sidebar using the "layered nav" widgets.', 'woocommerce' ); ?></p>
						<form action="edit.php?post_type=product&amp;page=product_attributes" method="post">
							<?php do_action( 'woocommerce_before_add_attribute_fields' ); ?>

							<div class="form-field">
								<label for="attribute_label"><?php esc_html_e( 'Name', 'woocommerce' ); ?></label>
								<input name="attribute_label" id="attribute_label" type="text" value="" />
								<p class="description"><?php esc_html_e( 'Name for the attribute (shown on the front-end).', 'woocommerce' ); ?></p>
							</div>

							<div class="form-field">
								<label for="attribute_name"><?php esc_html_e( 'Slug', 'woocommerce' ); ?></label>
								<input name="attribute_name" id="attribute_name" type="text" value="" maxlength="28" />
								<p class="description"><?php esc_html_e( 'Unique slug/reference for the attribute; must be no more than 28 characters.', 'woocommerce' ); ?></p>
							</div>

							<div class="form-field">
								<label for="attribute_public"><input name="attribute_public" id="attribute_public" type="checkbox" value="1" /> <?php esc_html_e( 'Enable Archives?', 'woocommerce' ); ?></label>

								<p class="description"><?php esc_html_e( 'Enable this if you want this attribute to have product archives in your store.', 'woocommerce' ); ?></p>
							</div>

							<?php
							/**
							 * Attribute types can change the way attributes are displayed on the frontend and admin.
							 *
							 * By Default WooCommerce only includes the `select` type. Others can be added with the
							 * `product_attributes_type_selector` filter. If there is only the default type registered,
							 * this setting will be hidden.
							 */
							if ( wc_has_custom_attribute_types() ) {
								?>
								<div class="form-field">
									<label for="attribute_type"><?php esc_html_e( 'Type', 'woocommerce' ); ?></label>
									<select name="attribute_type" id="attribute_type">
										<?php foreach ( wc_get_attribute_types() as $key => $value ) : ?>
											<option value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></option>
										<?php endforeach; ?>
										<?php
											/**
											 * Deprecated action in favor of product_attributes_type_selector filter.
											 *
											 * @todo Remove in 4.0.0
											 * @deprecated 2.4.0
											 */
											do_action( 'woocommerce_admin_attribute_types' );
										?>
									</select>
									<p class="description"><?php esc_html_e( "Determines how this attribute's values are displayed.", 'woocommerce' ); ?></p>
								</div>
								<?php
							}
							?>

							<div class="form-field">
								<label for="attribute_orderby"><?php esc_html_e( 'Default sort order', 'woocommerce' ); ?></label>
								<select name="attribute_orderby" id="attribute_orderby">
									<option value="menu_order"><?php esc_html_e( 'Custom ordering', 'woocommerce' ); ?></option>
									<option value="name"><?php esc_html_e( 'Name', 'woocommerce' ); ?></option>
									<option value="name_num"><?php esc_html_e( 'Name (numeric)', 'woocommerce' ); ?></option>
									<option value="id"><?php esc_html_e( 'Term ID', 'woocommerce' ); ?></option>
								</select>
								<p class="description"><?php esc_html_e( 'Determines the sort order of the terms on the frontend shop product pages. If using custom ordering, you can drag and drop the terms in this attribute.', 'woocommerce' ); ?></p>
							</div>

							<?php do_action( 'woocommerce_after_add_attribute_fields' ); ?>

							<p class="submit"><button type="submit" name="add_new_attribute" id="submit" class="button button-primary" value="<?php esc_attr_e( 'Add attribute', 'woocommerce' ); ?>"><?php esc_html_e( 'Add attribute', 'woocommerce' ); ?></button></p>
							<?php wp_nonce_field( 'woocommerce-add-new_attribute' ); ?>
						</form>
					</div>
				</div>
			</div>
		</div>
		<script type="text/javascript">
		/* <![CDATA[ */

			jQuery( 'a.delete' ).on( 'click', function() {
				if ( window.confirm( '<?php esc_html_e( 'Are you sure you want to delete this attribute?', 'woocommerce' ); ?>' ) ) {
					return true;
				}
				return false;
			});

		/* ]]> */
		</script>
	</div>
	<?php
}