ed-itsolutions/cmb2-field-ajax-search

v2.0.0 2020-07-01 15:35 UTC

This package is auto-updated.

Last update: 2024-08-29 05:43:21 UTC


README

CMB2 定制的字段,可以将帖子、用户或术语相互关联。

https://github.com/rubengc/cmb2-field-ajax-search 衍生而来。

此分支删除了将其用作插件的需要,而是允许您使用 composer 依赖它。

example

一旦激活,此插件将添加三个新的字段类型 post_ajax_searchuser_ajax_searchterm_ajax_search

此插件是 CMB2 Field Type: Post Search Ajax 的更新,由 Magina 提供,并支持关联帖子、用户或术语。

安装

通过 composer 安装

composer require ed-itsolutions/cmb2-field-ajax-search

确保您的 functions.php 文件加载了 composer

require_once('vendor/autoload.php');

如果资源无法加载,您可以使用过滤器 cmb2_field_ajax_search_url 来设置它。

add_filter('cmb2_field_ajax_search_url', function(){
	return (get_template_directory_uri() . '/cmb2-ajax-search/');
});

参数

选项

  • multiple (bool, 默认 = false) : 将字段转换为多个附加对象
  • limit (int, 默认 = -1 : 单一选择) : 限制可选择的帖子数量 (-1 为无限)
  • sortable (bool, 默认 = false) : 允许选定的项目排序(只有当 multiple = true 时)
  • query_args (array) : 传递到每个请求的查询参数

查询参数

  • query_args 接受与 WP_Query 相同的参数,用于 post_ajax_search
  • query_args 接受与 WP_User_Query 相同的参数,用于 user_ajax_search
  • query_args 接受与 WP_Term_Query 相同的参数,用于 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
		)
	) );

}

自定义结果输出

您可以使用 cmb_{$field_id}_ajax_search_result_text 来自定义从 AJAX 搜索返回的文本,并使用 cmb_{$field_id}_ajax_search_result_link 来自定义链接,请查看下一个示例

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;
}

检索字段值

如果 multiple == false 将返回附加对象的 ID:get_post_meta( get_the_ID(), 'your_field_id', true );

如果 multiple == true 将返回附加对象的 ID 数组:get_post_meta( get_the_ID(), 'your_field_id', false );

变更日志

2.0.0

Ed-IT Solutions 分支从这里开始

  • 可以从 composer 安装(这将破坏插件样式代码)。
  • 实现 rubengc#14

1.0.2

  • 更新 devbridgeAutocomplete 库

1.0.1

  • 支持分组字段
  • 支持小工具区域
  • 使用 devbridgeAutocomplete() 而不是 autocomplete() 来避免错误

1.0.0

  • 初始提交