Skip to content

Instantly share code, notes, and snippets.

@sxidsvit
Last active February 25, 2022 14:48
Show Gist options
  • Save sxidsvit/3299ce0c29feab3ae915b5c516bde09d to your computer and use it in GitHub Desktop.
Save sxidsvit/3299ce0c29feab3ae915b5c516bde09d to your computer and use it in GitHub Desktop.
ACF плагин: создаем дополнительные параметры в списках условий отображения мета-полей
<?php
/**
* ACF создаем своё условие отображения форм на примере рубрик ( дополнительный параметр категории )
* Скрипт написано по мотивам статьи https://wp-kama.ru/plugin/acf/dobavlenie-polej-k-opredelennoj-rubrike
* и видео https://www.youtube.com/watch?v=mHJHnyPLf0M&t=39s
*/
// Создаем новое правило
add_action( 'admin_init', 'asp_acf_new_condition');
function asp_acf_new_condition () {
add_filter('acf/location/rule_types', 'asp_location_rules_types');
function asp_location_rules_types($choices)
{
$key = __('Forms', 'acf');
if ( ! isset( $choices[$key] ) ) {
$choices[$key] = [];
};
$choices[$key][ 'category_id' ] = __('Category');
// error_log(print_r($choices, 1));
return $choices;
}
// Формируем список значений которые может принимать правило
add_filter( 'acf/location/rule_values/category_id', 'asp_location_rules_values_category_id');
function asp_location_rules_values_category_id($choices)
{
$terms = get_terms( [
'taxonomy' => 'category',
'hide_empty' => false,
]);
if ($terms) {
foreach ($terms as $term) {
$choices[$term->term_id] = $term->name;
}
}
// error_log(print_r($terms, 1));
return $choices;
}
// Отображение ACF поля в нужном экране админки
add_filter( 'acf/location/rule_match/category_id', 'asp_location_rules_match_category_id', 10, 3);
function asp_location_rules_match_category_id($match, $rule, $options) {
//error_log(print_r($rule, 1));
$screen = get_current_screen();
//error_log(print_r($screen, 1));
if ( $screen->base !== 'term' || $screen->id !== 'edit-category') {
return $match;
}
$term_id = $_GET[ 'tag_ID' ];
$select_term = $rule[ 'value' ];
if ( $rule[ 'operator' ] === '==') {
$match = ( $term_id == $select_term );
}
elseif ($rule[ 'operator' ] === '!=') {
$match = ( $term_id != $select_term );
}
return $match;
}
}
@relaxdd
Copy link

relaxdd commented Feb 25, 2022

Да и вправду, теперь match работает, нужно проверить что на каждой категории будет свое поле, как проверю закину сюда полный код если кому то в будущем понадобится

@relaxdd
Copy link

relaxdd commented Feb 25, 2022

код и в правду работает, однако не совсем так как мне нужно, я рассчитывал что значение поля в указанных категориях будет привязываться не к конкретной категории а к группе категорий которые я перечисляю в условиях отображения, видимо придется еще подумать или забить и просто скачать acf pro и вынести в option но как то не хочется

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment