Custom fields for CMB2 to attach posts, users or terms to each others.
Formed from https://github.com/rubengc/cmb2-field-ajax-search.
This fork removes the need to use this as a plugin and instead lets you require it using composer.
Once activated, this plugin adds three new field types post_ajax_search
, user_ajax_search
and term_ajax_search
.
This plugin is an update of CMB2 Field Type: Post Search Ajax by Magina with support to attach posts, users or terms.
Install from composer
composer require ed-itsolutions/cmb2-field-ajax-search
Make sure that your functions.php
loads composer
require_once('vendor/autoload.php');
If the assets don't load you can use the filter cmb2_field_ajax_search_url
to set it.
add_filter('cmb2_field_ajax_search_url', function(){
return (get_template_directory_uri() . '/cmb2-ajax-search/');
});
Options :
multiple
(bool, default = false) : Turn field into a multiple attached objectslimit
(int, default = -1 : single selection) : Limit the number of posts that can be selected (-1 for unlimited)sortable
(bool, default = false) : Allow selected items to be sort (only if multiple = true)query_args
(array) : Query arguments to pass on each request
Query args:
- query_args accepts same parameters as WP_Query for
post_ajax_search
- query_args accepts same parameters as WP_User_Query for
user_ajax_search
- query_args accepts same parameters as WP_Term_Query for
term_ajax_search
add_action('cmb2_admin_init', 'cmb2_ajax_search_metabox');
function cmb2_ajax_search_metabox(){
$prefix = 'your_prefix_demo_';
$cmb_demo = new_cmb2_box(array(
'id' => $prefix . 'metabox',
'title' => __( 'Attached posts Metabox', 'cmb2' ),
'object_types' => array( 'page', 'post' ), // Post type
) );
// Single post
$cmb_demo->add_field( array(
'name' => __( 'Attached post', 'cmb2' ),
'desc' => __( 'Field description (optional)', 'cmb2' ),
'id' => $prefix . 'post',
'type' => 'post_ajax_search',
'query_args' => array(
'post_type' => array( 'post' ),
'posts_per_page' => -1
)
) );
// Multiple posts
$cmb_demo->add_field( array(
'name' => __( 'Multiple posts', 'cmb2' ),
'desc' => __( 'Field description (optional)', 'cmb2' ),
'id' => $prefix . 'posts',
'type' => 'post_ajax_search',
'multiple-items' => true,
'limit' => 10,
'query_args' => array(
'post_type' => array( 'post', 'page' ),
'post_status' => array( 'publish', 'pending' )
)
) );
// Single user
$cmb_demo->add_field( array(
'name' => __( 'Attached user', 'cmb2' ),
'desc' => __( 'Field description (optional)', 'cmb2' ),
'id' => $prefix . 'user',
'type' => 'user_ajax_search',
'query_args' => array(
'role' => array( 'Subscriber' ),
'search_columns' => array( 'user_login', 'user_email' )
)
) );
// Multiple users
$cmb_demo->add_field( array(
'name' => __( 'Multiple users', 'cmb2' ),
'desc' => __( 'Field description (optional)', 'cmb2' ),
'id' => $prefix . 'users',
'type' => 'user_ajax_search',
'multiple-items' => true,
'limit' => 5,
'query_args' => array(
'role__not_in' => array( 'Administrator', 'Editor' ),
)
) );
// Single term
$cmb_demo->add_field( array(
'name' => __( 'Attached term', 'cmb2' ),
'desc' => __( 'Field description (optional)', 'cmb2' ),
'id' => $prefix . 'term',
'type' => 'term_ajax_search',
'query_args' => array(
'taxonomy' => 'category',
'childless' => true
)
) );
// Multiple terms
$cmb_demo->add_field( array(
'name' => __( 'Multiple terms', 'cmb2' ),
'desc' => __( 'Field description (optional)', 'cmb2' ),
'id' => $prefix . 'terms',
'type' => 'term_ajax_search',
'multiple-items'=> true,
'limit' => -1,
'query_args' => array(
'taxonomy' => 'post_tag',
'hide_empty' => false
)
) );
}
You can use cmb_{$field_id}_ajax_search_result_text
to customize the text returned from ajax searches and cmb_{$field_id}_ajax_search_result_link
to customize the link, check next example:
add_filter( 'cmb_your_prefix_demo_posts_ajax_search_result_text', 'cmb2_ajax_search_custom_field_text', 10, 3 );
function cmb2_ajax_search_custom_field_text( $text, $object_id, $object_type ) {
$text = sprintf( '#%s - %s', $object_id, $text ); // #123 - Post title
return $text;
}
add_filter( 'cmb_your_prefix_demo_posts_ajax_search_result_link', 'cmb2_ajax_search_custom_field_link', 10, 3 );
function cmb2_ajax_search_custom_field_link( $link, $object_id, $object_type ) {
if( $object_id == 123 ) {
$link = '#';
}
return $link;
}
If multiple == false will return the ID of attached object:
get_post_meta( get_the_ID(), 'your_field_id', true );
If multiple == true will return an array of IDs of attached object:
get_post_meta( get_the_ID(), 'your_field_id', false );
Ed-IT Solutions Fork Begins here
- Installable from composer (this breaks the plugin style code).
- Implements rubengc#14
- Updated devbridgeAutocomplete lib
- Group fields support
- Widget area support
- Use of devbridgeAutocomplete() instead of autocomplete() to avoid errors
- Initial commit