{"id":370356,"date":"2026-09-24T07:41:48","date_gmt":"2026-09-24T07:41:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/readable-list-tables\/"},"modified":"2026-09-24T07:41:14","modified_gmt":"2026-09-24T07:41:14","slug":"acato-readable-list-tables","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/acato-readable-list-tables\/","author":16835804,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"Acato Readable List Tables","header_author":"Acato","header_description":"Keeps the WordPress post overviews readable when plugins add a lot of columns: gives every column a real width, pins the checkbox and title columns, and lets the table scroll sideways instead of crushing the title.","assets_banners_color":"362a0d","last_updated":"2026-09-24 07:41:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/acato-plugins\/readable-list-tables","header_author_uri":"https:\/\/acato.nl","rating":0,"author_block_rating":0,"active_installs":0,"downloads":47,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"acato","date":"2026-09-24 07:41:14","revision":3710773}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3710773,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3710773,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3710773,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3710773,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3710775,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/edit.php\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"acato-readable-list-tables\"},\"options\":{\"activate\":true}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/mu-plugins\\\/rlt-preview-columns.php\",\"data\":\"<?php\\n\\\/**\\n * Plugin Name: Acato Readable List Tables - preview extras\\n * Description: Only loaded in the WordPress Playground preview. Adds the kind\\n *              of columns SEO, expiry and duplication plugins bolt onto the\\n *              post overview, so there is something for this plugin to fix.\\n *\\\/\\n\\ndefined( 'ABSPATH' ) || exit;\\n\\nfunction rlt_preview_columns() {\\n\\treturn array(\\n\\t\\t'rlt-preview-seo-title' => 'SEO title',\\n\\t\\t'rlt-preview-metadesc'  => 'Meta description',\\n\\t\\t'rlt-preview-keyphrase' => 'Focus keyphrase',\\n\\t\\t'rlt-preview-score'     => 'SEO score',\\n\\t\\t'rlt-preview-links'     => 'Internal links',\\n\\t\\t'rlt-preview-expires'   => 'Expires',\\n\\t\\t'rlt-preview-original'  => 'Original item',\\n\\t\\t'rlt-preview-template'  => 'Template',\\n\\t\\t'rlt-preview-reviewer'  => 'Reviewer',\\n\\t\\t'rlt-preview-language'  => 'Language',\\n\\t);\\n}\\n\\nadd_filter(\\n\\t'manage_post_posts_columns',\\n\\tfunction ( $columns ) {\\n\\t\\treturn array_merge( $columns, rlt_preview_columns() );\\n\\t}\\n);\\n\\nadd_action(\\n\\t'manage_post_posts_custom_column',\\n\\tfunction ( $column, $post_id ) {\\n\\t\\t$labels = rlt_preview_columns();\\n\\n\\t\\tif ( isset( $labels[ $column ] ) ) {\\n\\t\\t\\techo esc_html( $labels[ $column ] . ' for #' . $post_id );\\n\\t\\t}\\n\\t},\\n\\t10,\\n\\t2\\n);\\n\"},{\"step\":\"runPHP\",\"code\":\"<?php require_once 'wordpress\\\/wp-load.php'; $titles = array( 'Acato Readable List Tables gives every column a real width', 'Scroll sideways with the bar at the bottom of the window', 'The checkbox and title columns stay pinned', 'Quick Edit stays in view while the table is scrolled', 'Hide columns through Screen Options to make it fit', 'A post with a rather long title, to show the title column no longer collapses', 'Categories, tags and dates keep a sensible width', 'Columns from unknown plugins get a width too' ); foreach ( $titles as $title ) { wp_insert_post( array( 'post_title' => $title, 'post_status' => 'publish', 'post_content' => 'Preview content.' ) ); }\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1953,83,854,21863,3893],"plugin_category":[34],"plugin_contributors":[169381,282428],"plugin_business_model":[],"class_list":["post-370356","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-admin","plugin_tags-columns","plugin_tags-list-table","plugin_tags-usability","plugin_category-accessibility","plugin_contributors-acato","plugin_contributors-frankabeekman","plugin_committers-acato"],"banners":{"banner":"https:\/\/ps.w.org\/acato-readable-list-tables\/assets\/banner-772x250.png?rev=3710773","banner_2x":"https:\/\/ps.w.org\/acato-readable-list-tables\/assets\/banner-1544x500.png?rev=3710773","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/acato-readable-list-tables\/assets\/icon-128x128.png?rev=3710773","icon_2x":"https:\/\/ps.w.org\/acato-readable-list-tables\/assets\/icon-256x256.png?rev=3710773","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>WordPress renders the post overviews with <code>table-layout: fixed<\/code>. Core gives author, categories, tags and date percentage widths, and plugins such as Yoast SEO, Post Expirator and Duplicate Post give their columns fixed em widths. The title column is the only one with no width of its own, so it gets whatever is left over.<\/p>\n\n<p>With enough columns installed that is close to nothing. Measured with Yoast SEO Premium, Post Expirator and Duplicate Post active, 18 columns in total, the title column is 59px wide at a 1920px viewport, 22px at 1440px and 10px at 1280px. At that point the title is invisible and the column headers wrap one letter per line. A large monitor has enough width to spare, which is why this tends to be reported as \"it only happens on my laptop\".<\/p>\n\n<p>This plugin:<\/p>\n\n<ul>\n<li>Gives every column an explicit width, including columns it does not recognise, so none of them can collapse. <code>min-width<\/code> cannot do this job, because <code>table-layout: fixed<\/code> ignores it on table cells.<\/li>\n<li>Wraps the table in a horizontal scroll container, so a wide table scrolls on its own instead of squashing the title or scrolling the whole page.<\/li>\n<li>Adds a scrollbar that stays pinned to the bottom of the window, so a long table can be scrolled sideways from any row.<\/li>\n<li>Pins the checkbox and title columns, so you can still see which post a row is when scrolled to the right.<\/li>\n<li>Fades in a shadow at the right edge, and a divider beside the pinned title, to show that there is more to see.<\/li>\n<li>Keeps the Quick Edit and Bulk Edit forms in view, at the width of the visible area, wherever the table is scrolled to.<\/li>\n<\/ul>\n\n<p>The scroll container is exposed as a labelled region and becomes a tab stop only while it actually scrolls, so keyboard users can reach the off-screen columns without picking up a tab stop that does nothing.<\/p>\n\n<h4>Good to know<\/h4>\n\n<ul>\n<li>Development happens at <a href=\"https:\/\/github.com\/acato-plugins\/readable-list-tables\">github.com\/acato-plugins\/readable-list-tables<\/a>.<\/li>\n<li>Nothing is written to the database and no columns are hidden: editors keep whatever they had, and can still hide columns per screen through Screen Options. Deactivating the plugin leaves no trace.<\/li>\n<li>The plugin acts on the post overviews (edit.php) for every post type. The users, media and taxonomy screens are not touched.<\/li>\n<li>No front end code, and no settings screen. The behaviour can be adjusted with the filters below.<\/li>\n<\/ul>\n\n<h3>Filters<\/h3>\n\n<pre><code>acato_readable_list_tables_column_widths (array) column slug =&gt; width in pixels.\n\nacato_readable_list_tables_default_width (int) width for columns with no explicit width, default 130.\n\nacato_readable_list_tables_narrow_columns (array) CSS class names of columns that keep the width their own stylesheet gives them, such as the checkbox, the comment bubble and the Yoast score icons.\n\nacato_readable_list_tables_sticky_columns (bool) whether to pin the checkbox and title columns, default true.\n\nacato_readable_list_tables_enabled (bool, WP_Screen) whether to act on the current screen.\n<\/code><\/pre>\n\n<p>Example, widening the title column and sizing a column of your own:<\/p>\n\n<pre><code>add_filter( 'acato_readable_list_tables_column_widths', function ( $widths ) {\n    $widths['title']            = 320;\n    $widths['my_plugin_column'] = 200;\n\n    return $widths;\n} );\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it through <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen. On multisite you can network activate it.<\/li>\n<\/ol>\n\n<p>There are no settings. The behaviour can be adjusted with the filters below.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20hide%20any%20of%20my%20columns%3F\"><h3>Does this hide any of my columns?<\/h3><\/dt>\n<dd><p>No. Every column you had stays visible. If you would rather not scroll sideways, hide the columns you do not need through Screen Options at the top of the post overview.<\/p><\/dd>\n<dt id=\"why%20does%20the%20table%20scroll%20sideways%20now%3F\"><h3>Why does the table scroll sideways now?<\/h3><\/dt>\n<dd><p>Because the columns no longer collapse. With every column at a readable width the table can be wider than the window, so it scrolls instead of squeezing the title down to a few pixels. Hiding a few columns through Screen Options makes it fit again.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20column%20widths%3F\"><h3>Can I change the column widths?<\/h3><\/dt>\n<dd><p>Yes, with the <code>acato_readable_list_tables_column_widths<\/code> filter. See the section below.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20the%20users%20or%20media%20screens%3F\"><h3>Does it work on the users or media screens?<\/h3><\/dt>\n<dd><p>Not yet. Those list tables use different markup and column sets.<\/p><\/dd>\n<dt id=\"where%20are%20the%20translations%3F\"><h3>Where are the translations?<\/h3><\/dt>\n<dd><p>Translations are managed on <a href=\"https:\/\/translate.wordpress.org\/projects\/wp-plugins\/acato-readable-list-tables\/\">translate.wordpress.org<\/a> and are downloaded by WordPress automatically.<\/p><\/dd>\n<dt id=\"how%20can%20i%20report%20security%20bugs%3F\"><h3>How can I report security bugs?<\/h3><\/dt>\n<dd><p>You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. <a href=\"https:\/\/patchstack.com\/database\/vdp\/c0a4068d-1475-4ec9-8550-85984214d223\">Report a security vulnerability.<\/a><\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Stops the title column collapsing when plugins add a lot of columns to the post overviews.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370356"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/acato"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370356"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370356"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370356"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370356"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370356"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}