Skip to content

Admin box filters

Cristi Burcă edited this page Jun 10, 2013 · 40 revisions

p2p_admin_box_show

Example: Show the box only for pages with a certain template.

<?php
function restrict_p2p_box_display( $show, $ctype, $post ) {
	if ( 'posts_to_pages' == $ctype->name && 'to' == $ctype->get_direction() ) {
		return ( 'YOUR-TEMPLATE.php' == $post->page_template );
	}

	return $show;
}

add_filter( 'p2p_admin_box_show', 'restrict_p2p_box_display', 10, 3 );

p2p_connected_args

Called before querying for posts that are already connected to the current post.

p2p_connectable_args

Called before querying for posts that the user can connect to the current post.

Example 1: Ordering pages alphabetically

Given the 'posts_to_pages' connection type, say you want to display the candidate pages alphabetically instead of chronologically when creating connections.

You can do this with a little bit of PHP:

<?php
function order_pages_by_title( $args, $ctype, $post_id ) {
	if ( 'posts_to_pages' == $ctype->name && 'to' == $ctype->get_direction() ) {
		$args['orderby'] = 'title';
		$args['order'] = 'asc';
	}

	return $args;
}

add_filter( 'p2p_connectable_args', 'order_pages_by_title', 10, 3 );

Note that, since we check the direction, only pages will be affected by this change.

Example 2: Increasing the number of results per page

Posts-to-posts uses a custom query arg to determine how many results to show per page: p2p:per_page. To increase this from the default of 5 you can use a custom filter.

<?php
function connectable_results_per_page( $args, $ctype, $post_id ) {
    $args['p2p:per_page'] = 5;

    return $args;
}

add_filter( 'p2p_connectable_args', 'connectable_results_per_page', 10, 3 );

Note: Because we did not check the connection type, this would affect all admin boxes.

p2p_new_post_args

Called before creating a post via the "New" tab.

Example: Create published pages

By default, when you create a page directly from the P2P admin box, it's status will be 'draft'. If you want it to be published immediately, you can do something like this:

<?php
function p2p_published_by_default( $args, $ctype, $post_id ) {
	if ( 'posts_to_pages' == $ctype->name && 'to' == $ctype->get_direction() ) {
		$args['post_status'] = 'publish';
	}

	return $args;
}

add_filter( 'p2p_new_post_args', 'p2p_published_by_default', 10, 3 );

p2p_candidate_title

(since 1.6-alpha)

Example: Display a custom field value after each candidate's title.

<?php
function append_date_to_candidate_title( $title, $post, $ctype ) {
	if ( 'posts_to_pages' == $ctype->name && 'page' == $post->post_type ) {
		$title .= " (" . $post->_wp_page_template . ")";
	}

	return $title;
}

add_filter( 'p2p_candidate_title', 'append_date_to_candidate_title', 10, 3 );