Title: WP_Links_List_Table
Published: April 25, 2014
Last modified: February 24, 2026

---

# class WP_Links_List_Table {}

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#description)
    - [See also](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#see-also)
 * [Methods](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#wp--skip-link--target)

Core class used to implement displaying links in a list table.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#description)󠁿

### 󠀁[See also](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#see-also)󠁿

 * [WP_List_Table](https://developer.wordpress.org/reference/classes/wp_list_table/)

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#methods)󠁿

| Name | Description | 
| [WP_Links_List_Table::__construct](https://developer.wordpress.org/reference/classes/wp_links_list_table/__construct/) | Constructor. | 
| [WP_Links_List_Table::ajax_user_can](https://developer.wordpress.org/reference/classes/wp_links_list_table/ajax_user_can/) | – | 
| [WP_Links_List_Table::column_categories](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_categories/) | Handles the link categories column output. | 
| [WP_Links_List_Table::column_cb](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_cb/) | Handles the checkbox column output. | 
| [WP_Links_List_Table::column_default](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_default/) | Handles the default column output. | 
| [WP_Links_List_Table::column_name](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_name/) | Handles the link name column output. | 
| [WP_Links_List_Table::column_rating](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_rating/) | Handles the link rating column output. | 
| [WP_Links_List_Table::column_rel](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_rel/) | Handles the link relation column output. | 
| [WP_Links_List_Table::column_url](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_url/) | Handles the link URL column output. | 
| [WP_Links_List_Table::column_visible](https://developer.wordpress.org/reference/classes/wp_links_list_table/column_visible/) | Handles the link visibility column output. | 
| [WP_Links_List_Table::display_rows](https://developer.wordpress.org/reference/classes/wp_links_list_table/display_rows/) | Generates the list table rows. | 
| [WP_Links_List_Table::extra_tablenav](https://developer.wordpress.org/reference/classes/wp_links_list_table/extra_tablenav/) | – | 
| [WP_Links_List_Table::get_bulk_actions](https://developer.wordpress.org/reference/classes/wp_links_list_table/get_bulk_actions/) | – | 
| [WP_Links_List_Table::get_columns](https://developer.wordpress.org/reference/classes/wp_links_list_table/get_columns/) | – | 
| [WP_Links_List_Table::get_default_primary_column_name](https://developer.wordpress.org/reference/classes/wp_links_list_table/get_default_primary_column_name/) | Gets the name of the default primary column. | 
| [WP_Links_List_Table::get_sortable_columns](https://developer.wordpress.org/reference/classes/wp_links_list_table/get_sortable_columns/) | – | 
| [WP_Links_List_Table::handle_row_actions](https://developer.wordpress.org/reference/classes/wp_links_list_table/handle_row_actions/) | Generates and displays row action links. | 
| [WP_Links_List_Table::no_items](https://developer.wordpress.org/reference/classes/wp_links_list_table/no_items/) | – | 
| [WP_Links_List_Table::prepare_items](https://developer.wordpress.org/reference/classes/wp_links_list_table/prepare_items/) | – |

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#source)󠁿

    ```php
    class WP_Links_List_Table extends WP_List_Table {

    	/**
    	 * Constructor.
    	 *
    	 * @since 3.1.0
    	 *
    	 * @see WP_List_Table::__construct() for more information on default arguments.
    	 *
    	 * @param array $args An associative array of arguments.
    	 */
    	public function __construct( $args = array() ) {
    		parent::__construct(
    			array(
    				'plural' => 'bookmarks',
    				'screen' => isset( $args['screen'] ) ? $args['screen'] : null,
    			)
    		);
    	}

    	/**
    	 * @return bool
    	 */
    	public function ajax_user_can() {
    		return current_user_can( 'manage_links' );
    	}

    	/**
    	 * @global int    $cat_id
    	 * @global string $s
    	 * @global string $orderby
    	 * @global string $order
    	 */
    	public function prepare_items() {
    		global $cat_id, $s, $orderby, $order;

    		$cat_id  = ! empty( $_REQUEST['cat_id'] ) ? absint( $_REQUEST['cat_id'] ) : 0;
    		$orderby = ! empty( $_REQUEST['orderby'] ) ? sanitize_text_field( $_REQUEST['orderby'] ) : '';
    		$order   = ! empty( $_REQUEST['order'] ) ? sanitize_text_field( $_REQUEST['order'] ) : '';
    		$s       = ! empty( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '';

    		$args = array(
    			'hide_invisible' => 0,
    			'hide_empty'     => 0,
    		);

    		if ( 'all' !== $cat_id ) {
    			$args['category'] = $cat_id;
    		}
    		if ( ! empty( $s ) ) {
    			$args['search'] = $s;
    		}
    		if ( ! empty( $orderby ) ) {
    			$args['orderby'] = $orderby;
    		}
    		if ( ! empty( $order ) ) {
    			$args['order'] = $order;
    		}

    		$this->items = get_bookmarks( $args );
    	}

    	/**
    	 */
    	public function no_items() {
    		_e( 'No links found.' );
    	}

    	/**
    	 * @return array
    	 */
    	protected function get_bulk_actions() {
    		$actions           = array();
    		$actions['delete'] = __( 'Delete' );

    		return $actions;
    	}

    	/**
    	 * @global int $cat_id
    	 * @param string $which
    	 */
    	protected function extra_tablenav( $which ) {
    		global $cat_id;

    		if ( 'top' !== $which ) {
    			return;
    		}
    		?>
    		<div class="alignleft actions">
    			<?php
    			$dropdown_options = array(
    				'selected'        => $cat_id,
    				'name'            => 'cat_id',
    				'taxonomy'        => 'link_category',
    				'show_option_all' => get_taxonomy( 'link_category' )->labels->all_items,
    				'hide_empty'      => true,
    				'hierarchical'    => 1,
    				'show_count'      => 0,
    				'orderby'         => 'name',
    			);

    			echo '<label class="screen-reader-text" for="cat_id">' . get_taxonomy( 'link_category' )->labels->filter_by_item . '</label>';

    			wp_dropdown_categories( $dropdown_options );

    			submit_button( __( 'Filter' ), '', 'filter_action', false, array( 'id' => 'post-query-submit' ) );
    			?>
    		</div>
    		<?php
    	}

    	/**
    	 * @return string[] Array of column titles keyed by their column name.
    	 */
    	public function get_columns() {
    		return array(
    			'cb'         => '<input type="checkbox" />',
    			'name'       => _x( 'Name', 'link name' ),
    			'url'        => __( 'URL' ),
    			'categories' => __( 'Categories' ),
    			'rel'        => __( 'Relationship' ),
    			'visible'    => __( 'Visible' ),
    			'rating'     => __( 'Rating' ),
    		);
    	}

    	/**
    	 * @return array
    	 */
    	protected function get_sortable_columns() {
    		return array(
    			'name'    => array( 'name', false, _x( 'Name', 'link name' ), __( 'Table ordered by Name.' ), 'asc' ),
    			'url'     => array( 'url', false, __( 'URL' ), __( 'Table ordered by URL.' ) ),
    			'visible' => array( 'visible', false, __( 'Visible' ), __( 'Table ordered by Visibility.' ) ),
    			'rating'  => array( 'rating', false, __( 'Rating' ), __( 'Table ordered by Rating.' ) ),
    		);
    	}

    	/**
    	 * Gets the name of the default primary column.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @return string Name of the default primary column, in this case, 'name'.
    	 */
    	protected function get_default_primary_column_name() {
    		return 'name';
    	}

    	/**
    	 * Handles the checkbox column output.
    	 *
    	 * @since 4.3.0
    	 * @since 5.9.0 Renamed `$link` to `$item` to match parent class for PHP 8 named parameter support.
    	 *
    	 * @param object $item The current link object.
    	 */
    	public function column_cb( $item ) {
    		// Restores the more descriptive, specific name for use within this method.
    		$link = $item;

    		?>
    		<input type="checkbox" name="linkcheck[]" id="cb-select-<?php echo $link->link_id; ?>" value="<?php echo esc_attr( $link->link_id ); ?>" />
    		<label for="cb-select-<?php echo $link->link_id; ?>">
    			<span class="screen-reader-text">
    			<?php
    			/* translators: Hidden accessibility text. %s: Link name. */
    			printf( __( 'Select %s' ), $link->link_name );
    			?>
    			</span>
    		</label>
    		<?php
    	}

    	/**
    	 * Handles the link name column output.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @param object $link The current link object.
    	 */
    	public function column_name( $link ) {
    		$edit_link = get_edit_bookmark_link( $link );
    		printf(
    			'<strong><a class="row-title" href="%s" aria-label="%s">%s</a></strong>',
    			$edit_link,
    			/* translators: %s: Link name. */
    			esc_attr( sprintf( __( 'Edit &#8220;%s&#8221;' ), $link->link_name ) ),
    			$link->link_name
    		);
    	}

    	/**
    	 * Handles the link URL column output.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @param object $link The current link object.
    	 */
    	public function column_url( $link ) {
    		$short_url = url_shorten( $link->link_url );
    		echo "<a href='$link->link_url'>$short_url</a>";
    	}

    	/**
    	 * Handles the link categories column output.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @global int $cat_id
    	 *
    	 * @param object $link The current link object.
    	 */
    	public function column_categories( $link ) {
    		global $cat_id;

    		$cat_names = array();
    		foreach ( $link->link_category as $category ) {
    			$cat = get_term( $category, 'link_category', OBJECT, 'display' );
    			if ( is_wp_error( $cat ) ) {
    				echo $cat->get_error_message();
    			}
    			$cat_name = $cat->name;
    			if ( (int) $cat_id !== $category ) {
    				$cat_name = "<a href='link-manager.php?cat_id=$category'>$cat_name</a>";
    			}
    			$cat_names[] = $cat_name;
    		}
    		echo implode( ', ', $cat_names );
    	}

    	/**
    	 * Handles the link relation column output.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @param object $link The current link object.
    	 */
    	public function column_rel( $link ) {
    		echo empty( $link->link_rel ) ? '<br />' : $link->link_rel;
    	}

    	/**
    	 * Handles the link visibility column output.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @param object $link The current link object.
    	 */
    	public function column_visible( $link ) {
    		if ( 'Y' === $link->link_visible ) {
    			_e( 'Yes' );
    		} else {
    			_e( 'No' );
    		}
    	}

    	/**
    	 * Handles the link rating column output.
    	 *
    	 * @since 4.3.0
    	 *
    	 * @param object $link The current link object.
    	 */
    	public function column_rating( $link ) {
    		echo $link->link_rating;
    	}

    	/**
    	 * Handles the default column output.
    	 *
    	 * @since 4.3.0
    	 * @since 5.9.0 Renamed `$link` to `$item` to match parent class for PHP 8 named parameter support.
    	 *
    	 * @param object $item        Link object.
    	 * @param string $column_name Current column name.
    	 */
    	public function column_default( $item, $column_name ) {
    		// Restores the more descriptive, specific name for use within this method.
    		$link = $item;

    		/**
    		 * Fires for each registered custom link column.
    		 *
    		 * @since 2.1.0
    		 *
    		 * @param string $column_name Name of the custom column.
    		 * @param int    $link_id     Link ID.
    		 */
    		do_action( 'manage_link_custom_column', $column_name, $link->link_id );
    	}

    	/**
    	 * Generates the list table rows.
    	 *
    	 * @since 3.1.0
    	 */
    	public function display_rows() {
    		foreach ( $this->items as $link ) {
    			$link                = sanitize_bookmark( $link );
    			$link->link_name     = esc_attr( $link->link_name );
    			$link->link_category = wp_get_link_cats( $link->link_id );
    			?>
    		<tr id="link-<?php echo $link->link_id; ?>">
    			<?php $this->single_row_columns( $link ); ?>
    		</tr>
    			<?php
    		}
    	}

    	/**
    	 * Generates and displays row action links.
    	 *
    	 * @since 4.3.0
    	 * @since 5.9.0 Renamed `$link` to `$item` to match parent class for PHP 8 named parameter support.
    	 *
    	 * @param object $item        Link being acted upon.
    	 * @param string $column_name Current column name.
    	 * @param string $primary     Primary column name.
    	 * @return string Row actions output for links, or an empty string
    	 *                if the current column is not the primary column.
    	 */
    	protected function handle_row_actions( $item, $column_name, $primary ) {
    		if ( $primary !== $column_name ) {
    			return '';
    		}

    		// Restores the more descriptive, specific name for use within this method.
    		$link = $item;

    		$edit_link = get_edit_bookmark_link( $link );

    		$actions           = array();
    		$actions['edit']   = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>';
    		$actions['delete'] = sprintf(
    			'<a class="submitdelete" href="%s" onclick="return confirm( \'%s\' );">%s</a>',
    			wp_nonce_url( "link.php?action=delete&amp;link_id=$link->link_id", 'delete-bookmark_' . $link->link_id ),
    			/* translators: %s: Link name. */
    			esc_js( sprintf( __( "You are about to delete this link '%s'\n  'Cancel' to stop, 'OK' to delete." ), $link->link_name ) ),
    			__( 'Delete' )
    		);

    		return $this->row_actions( $actions );
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-admin/includes/class-wp-links-list-table.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-admin/includes/class-wp-links-list-table.php#L17)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-admin/includes/class-wp-links-list-table.php#L17-L362)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_List_Table](https://developer.wordpress.org/reference/classes/wp_list_table/)`wp-admin/includes/class-wp-list-table.php` |

Base class for displaying a list of items in an ajaxified HTML table.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_links_list_table/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.1.0](https://developer.wordpress.org/reference/since/3.1.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_links_list_table%2F)
before being able to contribute a note or feedback.