お問い合わせはコチラから

Woocommerce商品一覧を便利にするカスタマイズ

サイト運営

Woocommerceの商品一覧でチョット便利な機能を追加するカスタマイズをご紹介します。

商品一覧でIDを表示してソート可能にする

admin画面の追加CSSで横幅を追加しないとレスポンシブが上手くいきません。

 /*
|--------------------------------------------------------------------------
| WooCommerce Product Extra Columns
|--------------------------------------------------------------------------
*/

/**
 * Load Custom Product Columns
 *
 * @access      public
 * @since       1.0 
 * @return      
*/
function woo_product_extra_columns($columns)
{

	$newcolumns = array(
		"cb"       		=> "<input type  = \"checkbox\" />",
		"product_ID"    => esc_html__('ID', 'woocommerce'),
	);

	$columns = array_merge($newcolumns, $columns);
	
	return $columns;
}
add_filter("manage_edit-product_columns", "woo_product_extra_columns");


/**
 * Charge Product Columns Content
 *
 * @access      public
 * @since       1.0 
 * @return      
*/
function woo_product_extra_columns_content($column)
{
	global $post;
	
	$product_id = $post->ID;

	switch ($column)
	{
		case "product_ID":
			echo $product_id;
		break;	
		
	}
}
add_action("manage_posts_custom_column",  "woo_product_extra_columns_content");

function sort_posts_columns_postid($columns) {
$columns['product_ID'] = 'ID';
return $columns;
}
add_filter( 'manage_edit-product_sortable_columns', 'sort_posts_columns_postid' );
/**
 * 管理画面に追加のスタイルを追加
 */
function custom_admin_style() {
	?><style>
	table.wp-list-table .column-product_ID {
    width: 54px;
    text-align: center;
    white-space: nowrap;
	}
	</style><?php
}
add_action( 'admin_head', 'custom_admin_style' );

商品一覧の一括操作で公開・非公開をトグルさせる

WordPressの管理画面の一覧は一括操作というメニューがあって、これがものすごい便利です。この機能を知っているとつまらない単純作業を一気に行えるので素晴らしいのですが、知られていないのであまり使っている人がいないようです。

この一括操作なのですが、公開・非公開の切り替えのためには一度編集を選択してそこから設定する必要があり、UI的にちょっとわかりにくい。

ということで、一括操作の操作内容を直接編集して使いやすくしましょうというカスタマイズです。

add_filter( 'bulk_actions-edit-post', 'add_bulk_actions' );
add_filter( 'bulk_actions-edit-product', 'add_bulk_actions' );

function add_bulk_actions( $actions ) {
  $actions['switch_post_status'] = __( '公開・非公開切り替え' );
  return $actions;
}

add_filter( 'handle_bulk_actions-edit-post', 'add_bulk_action_handler', 10, 3 );
add_filter( 'handle_bulk_actions-edit-product', 'add_bulk_action_handler', 10, 3 );

function add_bulk_action_handler( $redirect_url, $doaction, $post_ids ) {
  if ( $doaction !== 'switch_post_status' ) {
    return $redirect_url;
  }

  $redirect_url = remove_query_arg( 'switch_status', $redirect_url );

  if ( $doaction == 'switch_post_status' ) {
    $count = 0;
    foreach ( $post_ids as $post_id ) {
      $post_status = get_post_status( $post_id );
      if ( $post_status == 'publish' ) {
        wp_update_post( array( 'ID' => $post_id, 'post_status' => 'private' ) );
        $count++;
      } elseif ( $post_status == 'private' ) {
        wp_update_post( array( 'ID' => $post_id, 'post_status' => 'publish' ) );
        $count++;
      }
    }
    if ( $count ) {
      $redirect_url = add_query_arg( 'switch_status', $count, $redirect_url );
    }
  }

  return $redirect_url;
}

add_action( 'admin_notices', 'add_bulk_action_notices' );
function add_bulk_action_notices() {
  if ( ! empty( $_REQUEST['switch_status'] ) ) {
    $notices_text = intval( $_REQUEST['switch_status'] ) . '件の投稿ステータスを切り替えました。';
    echo '<div class="updated notice is-dismissible"><p>' . $notices_text . '</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">この通知を非表示にする</span></button></div>';
  }
}

参考https://www.nxworld.net/wordpress/wp-custom-bulk-actions.html

タイトルとURLをコピーしました