[英]Sort by ACF field in the products in my Custom Post Type in Wordpress
[英]Wordpress: How to make unique field with ACF and custom post type
所以我正在研究自定义帖子类型以与高级自定义字段一起使用。 我有这个小脚本,可以阻止输入重复的电子邮件。 但是脚本不能像我想要的那样工作。
您在下面看到的代码用于我已链接到 ACF 的自定义帖子类型页面。
function init_members() {
$labels = array(
'name' => 'Members',
'singular_name' => 'Member',
'menu_name' => 'Members',
'name_admin_bar' => 'Member',
'add_new' => 'New member',
'add_new_item' => 'New member',
'new_item' => 'New member',
'edit_item' => 'Edit member',
'all_items' => 'All members',
'search_items' => 'Search member',
'not_found' => 'No members found',
'not_found_in_trash' => 'No members found in trash'
);
$args = array(
'labels' => $labels,
'public' => true,
'exclude_from_search' => true,
'rewrite' => array('slug' => 'member'),
'has_archive' => false,
'supports' => array('title'),
'show_in_rest' => true,
'menu_icon' => 'dashicons-groups'
);
register_post_type('members', $args);
}
add_action('init', 'init_members');
function add_member_columns ( $columns ) {
unset($columns['date']);
return array_merge ( $columns, array (
'contactperson' => __ ( 'Contactperson' ),
'phone_number' => __ ( 'Phonenumber' ),
'email' => __ ( 'Email' ),
) );
}
add_filter ('manage_members_posts_columns', 'add_member_columns' );
function fill_member_columns ( $column, $post_id ) {
switch ( $column ) {
case 'contactperson':
echo get_post_meta ( $post_id, 'contactperson', true );
break;
case 'phone_number':
echo get_post_meta ( $post_id, 'phone_number', true );
break;
case 'email':
echo get_post_meta ( $post_id, 'email', true );
break;
}
}
add_action ('manage_members_posts_custom_column', 'fill_member_columns', 10, 2 );
因此,我尝试过滤重复电子邮件使用的脚本如下。 我从哪里得到它的来源在这里
add_filter('acf/validate_value/name='.'email', 'acf_unique_value_field', 10, 4);
function acf_unique_value_field($valid, $value, $field, $input) {
if (!$valid || (!isset($_POST['post_ID']) && !isset($_POST['post_id']))) {
return $valid;
}
if (isset($_POST['post_ID'])) {
$post_id = intval($_POST['post_ID']);
} else {
$post_id = intval($_POST['post_id']);
}
if (!$post_id) {
return $valid;
}
$post_type = get_post_type($post_id);
$field_name = $field['name'];
$args = array(
'post_type' => $post_type,
'post_status' => 'publish, draft, trash',
'post__not_in' => array($post_id),
'meta_query' => array(
array(
'key' => 'email',
'value' => $value
)
)
);
$query = new WP_Query($args);
if (count($query->posts)){
return 'This Value is not Unique. Please enter a unique '.$field['label'];
}
return true;
}
我可能会监督一些非常明显的事情。 但我无法找到我正在监督的内容。
我认为问题可能在于您没有查询所有现有帖子。 如果您的每页帖子默认配置为 5,并且第 6 个帖子与更新后的帖子具有相同的邮件地址,则您的支票将找不到任何匹配的帖子。
尝试以下操作:在acf_unique_value_field()
,像这样修复您的查询:
$args = array(
'post_type' => $post_type,
'post_status' => 'publish, draft, trash',
'post__not_in' => array($post_id),
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'email',
'value' => $value
)
)
);
$query = new WP_Query($args);
'posts_per_page' => -1,
将查询无限数量的帖子。
另外,我已经看到您使用get_post_meta
来检索 ACF 字段值。 我建议不要这样做。 改用 ACF 的get_field
(如有必要,使用update_field
进行更新)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.