Fixed row actions to support WordPress 4.3, closes #8578
This commit is contained in:
parent
6a62b63813
commit
30f9d81916
|
@ -46,6 +46,9 @@ class WC_Admin_Post_Types {
|
||||||
|
|
||||||
add_filter( 'bulk_actions-edit-shop_order', array( $this, 'shop_order_bulk_actions' ) );
|
add_filter( 'bulk_actions-edit-shop_order', array( $this, 'shop_order_bulk_actions' ) );
|
||||||
|
|
||||||
|
add_filter( 'list_table_primary_column', array( $this, 'list_table_primary_column' ), 10, 2 );
|
||||||
|
add_filter( 'post_row_actions', array( $this, 'row_actions' ), 2, 100 );
|
||||||
|
|
||||||
// Views
|
// Views
|
||||||
add_filter( 'views_edit-product', array( $this, 'product_sorting_link' ) );
|
add_filter( 'views_edit-product', array( $this, 'product_sorting_link' ) );
|
||||||
|
|
||||||
|
@ -268,6 +271,7 @@ class WC_Admin_Post_Types {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ouput custom columns for products
|
* Ouput custom columns for products
|
||||||
|
*
|
||||||
* @param string $column
|
* @param string $column
|
||||||
*/
|
*/
|
||||||
public function render_product_columns( $column ) {
|
public function render_product_columns( $column ) {
|
||||||
|
@ -284,8 +288,6 @@ class WC_Admin_Post_Types {
|
||||||
case 'name' :
|
case 'name' :
|
||||||
$edit_link = get_edit_post_link( $post->ID );
|
$edit_link = get_edit_post_link( $post->ID );
|
||||||
$title = _draft_or_post_title();
|
$title = _draft_or_post_title();
|
||||||
$post_type_object = get_post_type_object( $post->post_type );
|
|
||||||
$can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID );
|
|
||||||
|
|
||||||
echo '<strong><a class="row-title" href="' . esc_url( $edit_link ) .'">' . $title .'</a>';
|
echo '<strong><a class="row-title" href="' . esc_url( $edit_link ) .'">' . $title .'</a>';
|
||||||
|
|
||||||
|
@ -302,48 +304,7 @@ class WC_Admin_Post_Types {
|
||||||
echo apply_filters( 'the_excerpt', $post->post_excerpt );
|
echo apply_filters( 'the_excerpt', $post->post_excerpt );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get actions
|
$this->_render_product_row_actions( $post, $title );
|
||||||
$actions = array();
|
|
||||||
|
|
||||||
$actions['id'] = 'ID: ' . $post->ID;
|
|
||||||
|
|
||||||
if ( $can_edit_post && 'trash' != $post->post_status ) {
|
|
||||||
$actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item', 'woocommerce' ) ) . '">' . __( 'Edit', 'woocommerce' ) . '</a>';
|
|
||||||
$actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline', 'woocommerce' ) ) . '">' . __( 'Quick Edit', 'woocommerce' ) . '</a>';
|
|
||||||
}
|
|
||||||
if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
|
|
||||||
if ( 'trash' == $post->post_status ) {
|
|
||||||
$actions['untrash'] = '<a title="' . esc_attr( __( 'Restore this item from the Trash', 'woocommerce' ) ) . '" href="' . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . '">' . __( 'Restore', 'woocommerce' ) . '</a>';
|
|
||||||
} elseif ( EMPTY_TRASH_DAYS ) {
|
|
||||||
$actions['trash'] = '<a class="submitdelete" title="' . esc_attr( __( 'Move this item to the Trash', 'woocommerce' ) ) . '" href="' . get_delete_post_link( $post->ID ) . '">' . __( 'Trash', 'woocommerce' ) . '</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( 'trash' == $post->post_status || ! EMPTY_TRASH_DAYS ) {
|
|
||||||
$actions['delete'] = '<a class="submitdelete" title="' . esc_attr( __( 'Delete this item permanently', 'woocommerce' ) ) . '" href="' . get_delete_post_link( $post->ID, '', true ) . '">' . __( 'Delete Permanently', 'woocommerce' ) . '</a>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( $post_type_object->public ) {
|
|
||||||
if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
|
|
||||||
if ( $can_edit_post )
|
|
||||||
$actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview “%s”', 'woocommerce' ), $title ) ) . '" rel="permalink">' . __( 'Preview', 'woocommerce' ) . '</a>';
|
|
||||||
} elseif ( 'trash' != $post->post_status ) {
|
|
||||||
$actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View “%s”', 'woocommerce' ), $title ) ) . '" rel="permalink">' . __( 'View', 'woocommerce' ) . '</a>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$actions = apply_filters( 'post_row_actions', $actions, $post );
|
|
||||||
|
|
||||||
echo '<div class="row-actions">';
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
$action_count = sizeof( $actions );
|
|
||||||
|
|
||||||
foreach ( $actions as $action => $link ) {
|
|
||||||
++$i;
|
|
||||||
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
|
|
||||||
echo '<span class="' . $action . '">' . $link . $sep . '</span>';
|
|
||||||
}
|
|
||||||
echo '</div>';
|
|
||||||
|
|
||||||
get_inline_data( $post );
|
get_inline_data( $post );
|
||||||
|
|
||||||
|
@ -444,39 +405,48 @@ class WC_Admin_Post_Types {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Output custom columns for coupons
|
* Render product row actions for old version of WordPress
|
||||||
* @param string $column
|
* Since WordPress 4.3 we don't have to build the row actions
|
||||||
|
*
|
||||||
|
* @param WP_Post $post
|
||||||
|
* @param string $title
|
||||||
*/
|
*/
|
||||||
public function render_shop_coupon_columns( $column ) {
|
private function _render_product_row_actions( $post, $title ) {
|
||||||
global $post, $woocommerce;
|
global $wp_version;
|
||||||
|
|
||||||
|
if ( version_compare( $wp_version, '4.3-beta', '>=' ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch ( $column ) {
|
|
||||||
case 'coupon_code' :
|
|
||||||
$edit_link = get_edit_post_link( $post->ID );
|
|
||||||
$title = _draft_or_post_title();
|
|
||||||
$post_type_object = get_post_type_object( $post->post_type );
|
$post_type_object = get_post_type_object( $post->post_type );
|
||||||
|
$can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID );
|
||||||
echo '<strong><a href="' . esc_attr( $edit_link ) . '" class="row-title">' . esc_html( $title ). '</a></strong>';
|
|
||||||
|
|
||||||
_post_states( $post );
|
|
||||||
|
|
||||||
// Get actions
|
// Get actions
|
||||||
$actions = array();
|
$actions = array();
|
||||||
|
|
||||||
if ( current_user_can( $post_type_object->cap->edit_post, $post->ID ) ) {
|
$actions['id'] = 'ID: ' . $post->ID;
|
||||||
$actions['edit'] = '<a href="' . admin_url( sprintf( $post_type_object->_edit_link . '&action=edit', $post->ID ) ) . '">' . __( 'Edit', 'woocommerce' ) . '</a>';
|
|
||||||
|
if ( $can_edit_post && 'trash' != $post->post_status ) {
|
||||||
|
$actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item', 'woocommerce' ) ) . '">' . __( 'Edit', 'woocommerce' ) . '</a>';
|
||||||
|
$actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline', 'woocommerce' ) ) . '">' . __( 'Quick Edit', 'woocommerce' ) . '</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
|
if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
|
||||||
|
|
||||||
if ( 'trash' == $post->post_status ) {
|
if ( 'trash' == $post->post_status ) {
|
||||||
$actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash', 'woocommerce' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore', 'woocommerce' ) . "</a>";
|
$actions['untrash'] = '<a title="' . esc_attr( __( 'Restore this item from the Trash', 'woocommerce' ) ) . '" href="' . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . '">' . __( 'Restore', 'woocommerce' ) . '</a>';
|
||||||
} elseif ( EMPTY_TRASH_DAYS ) {
|
} elseif ( EMPTY_TRASH_DAYS ) {
|
||||||
$actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash', 'woocommerce' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash', 'woocommerce' ) . "</a>";
|
$actions['trash'] = '<a class="submitdelete" title="' . esc_attr( __( 'Move this item to the Trash', 'woocommerce' ) ) . '" href="' . get_delete_post_link( $post->ID ) . '">' . __( 'Trash', 'woocommerce' ) . '</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( 'trash' == $post->post_status || ! EMPTY_TRASH_DAYS ) {
|
if ( 'trash' == $post->post_status || ! EMPTY_TRASH_DAYS ) {
|
||||||
$actions['delete'] = "<a class='submitdelete' title='" . esc_attr( __( 'Delete this item permanently', 'woocommerce' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently', 'woocommerce' ) . "</a>";
|
$actions['delete'] = '<a class="submitdelete" title="' . esc_attr( __( 'Delete this item permanently', 'woocommerce' ) ) . '" href="' . get_delete_post_link( $post->ID, '', true ) . '">' . __( 'Delete Permanently', 'woocommerce' ) . '</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( $post_type_object->public ) {
|
||||||
|
if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
|
||||||
|
if ( $can_edit_post )
|
||||||
|
$actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview “%s”', 'woocommerce' ), $title ) ) . '" rel="permalink">' . __( 'Preview', 'woocommerce' ) . '</a>';
|
||||||
|
} elseif ( 'trash' != $post->post_status ) {
|
||||||
|
$actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View “%s”', 'woocommerce' ), $title ) ) . '" rel="permalink">' . __( 'View', 'woocommerce' ) . '</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -490,10 +460,29 @@ class WC_Admin_Post_Types {
|
||||||
foreach ( $actions as $action => $link ) {
|
foreach ( $actions as $action => $link ) {
|
||||||
++$i;
|
++$i;
|
||||||
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
|
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
|
||||||
echo "<span class='$action'>$link$sep</span>";
|
echo '<span class="' . $action . '">' . $link . $sep . '</span>';
|
||||||
}
|
}
|
||||||
echo '</div>';
|
echo '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output custom columns for coupons
|
||||||
|
*
|
||||||
|
* @param string $column
|
||||||
|
*/
|
||||||
|
public function render_shop_coupon_columns( $column ) {
|
||||||
|
global $post, $woocommerce;
|
||||||
|
|
||||||
|
switch ( $column ) {
|
||||||
|
case 'coupon_code' :
|
||||||
|
$edit_link = get_edit_post_link( $post->ID );
|
||||||
|
$title = _draft_or_post_title();
|
||||||
|
|
||||||
|
echo '<strong><a href="' . esc_attr( $edit_link ) . '" class="row-title">' . esc_html( $title ). '</a></strong>';
|
||||||
|
|
||||||
|
_post_states( $post );
|
||||||
|
|
||||||
|
$this->_render_shop_coupon_row_actions( $post, $title );
|
||||||
break;
|
break;
|
||||||
case 'type' :
|
case 'type' :
|
||||||
echo esc_html( wc_get_coupon_type( get_post_meta( $post->ID, 'discount_type', true ) ) );
|
echo esc_html( wc_get_coupon_type( get_post_meta( $post->ID, 'discount_type', true ) ) );
|
||||||
|
@ -546,6 +535,57 @@ class WC_Admin_Post_Types {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render shop_coupon row actions for old version of WordPress
|
||||||
|
* Since WordPress 4.3 we don't have to build the row actions
|
||||||
|
*
|
||||||
|
* @param WP_Post $post
|
||||||
|
* @param string $title
|
||||||
|
*/
|
||||||
|
private function _render_shop_coupon_row_actions( $post, $title ) {
|
||||||
|
global $wp_version;
|
||||||
|
|
||||||
|
if ( version_compare( $wp_version, '4.3-beta', '>=' ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$post_type_object = get_post_type_object( $post->post_type );
|
||||||
|
|
||||||
|
// Get actions
|
||||||
|
$actions = array();
|
||||||
|
|
||||||
|
if ( current_user_can( $post_type_object->cap->edit_post, $post->ID ) ) {
|
||||||
|
$actions['edit'] = '<a href="' . admin_url( sprintf( $post_type_object->_edit_link . '&action=edit', $post->ID ) ) . '">' . __( 'Edit', 'woocommerce' ) . '</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
|
||||||
|
|
||||||
|
if ( 'trash' == $post->post_status ) {
|
||||||
|
$actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash', 'woocommerce' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore', 'woocommerce' ) . "</a>";
|
||||||
|
} elseif ( EMPTY_TRASH_DAYS ) {
|
||||||
|
$actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash', 'woocommerce' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash', 'woocommerce' ) . "</a>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'trash' == $post->post_status || ! EMPTY_TRASH_DAYS ) {
|
||||||
|
$actions['delete'] = "<a class='submitdelete' title='" . esc_attr( __( 'Delete this item permanently', 'woocommerce' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently', 'woocommerce' ) . "</a>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$actions = apply_filters( 'post_row_actions', $actions, $post );
|
||||||
|
|
||||||
|
echo '<div class="row-actions">';
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
$action_count = sizeof( $actions );
|
||||||
|
|
||||||
|
foreach ( $actions as $action => $link ) {
|
||||||
|
++$i;
|
||||||
|
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
|
||||||
|
echo "<span class='$action'>$link$sep</span>";
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Output custom columns for coupons
|
* Output custom columns for coupons
|
||||||
* @param string $column
|
* @param string $column
|
||||||
|
@ -817,6 +857,58 @@ class WC_Admin_Post_Types {
|
||||||
return $actions;
|
return $actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set list table primary column for products and orders
|
||||||
|
* Support for WordPress 4.3
|
||||||
|
*
|
||||||
|
* @param string $default
|
||||||
|
* @param string $screen_id
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function list_table_primary_column( $default, $screen_id ) {
|
||||||
|
|
||||||
|
if ( 'edit-product' === $screen_id ) {
|
||||||
|
return 'name';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'edit-shop_order' === $screen_id ) {
|
||||||
|
return 'order_title';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'edit-shop_coupon' === $screen_id ) {
|
||||||
|
return 'coupon_code';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set row actions for products and orders
|
||||||
|
*
|
||||||
|
* @param array $actions
|
||||||
|
* @param WP_Post $post
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function row_actions( $actions, $post ) {
|
||||||
|
if ( 'product' === $post->post_type ) {
|
||||||
|
return array_merge( array( 'id' => 'ID: ' . $post->ID ), $actions );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'shop_order' === $post->post_type ) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( 'shop_coupon' === $post->post_type ) {
|
||||||
|
if ( isset( $actions['inline hide-if-no-js'] ) ) {
|
||||||
|
unset( $actions['inline hide-if-no-js'] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $actions;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Product sorting link
|
* Product sorting link
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue