Здравствуйте. Уже поднимал недавно тему по поводу вывода {RCL-UM:meta_key}, чтоб выводить пустое значение. Теперь вопрос немного иной, можно ли сделать чтоб вывод осуществлялся ещё и по значению произвольного поля. К примеру {RCL-UM:meta_key|Утро}. Немножко покопался, вот функция вывода:
add_filter( 'rcl_custom_tab_content', 'rcl_filter_custom_tab_usermetas', 5 ); function rcl_filter_custom_tab_usermetas( $content ) { global $rcl_office; preg_match_all( '/{RCL-UM:([^}]+)}/', $content, $metas ); if ( ! $metas[1] ) return $content; $vars = array(); $replaces = array(); foreach ( $metas[1] as $meta ) { $vars[] = '{RCL-UM:' . $meta . '}'; $value = ($value = get_the_author_meta( $meta, $rcl_office )) ? $value : __( '', 'wp-recall' ); if ( is_array( $value ) ) { $value = implode( ', ', $value ); } $replaces[] = $value; } return str_replace( $vars, $replaces, $content ); }
Может быть добавить в этом коде к $vars[] = '{RCL-UM:' . $meta . '}'; ещё переменную $value, которая будет выводить по значению произвольного поля. Ну и наверное строку preg_match_all( '/{RCL-UM:([^}]+)}/', $content, $metas ); нужно будет подкоректировать. Подскажите пожалуйста мужики.
Допустим создано произвольное поле типа чекбокс с метакеем ponedelnik с вариантами выбора: Утро, День, Вечер, Ночь. Нужно вывести значение только чекбокса Утро (если выбрано, то соответственно как обычно через {RCL-UM:meta_key} выводится значение, т.е. слово "Утро", если не выбрано то "Не указано"(в моём случае выводится пустое поле, так как удалил вывод слов "Не указано"). Другой вариант выбора, если выбран, то пойдёт со своим выбранным значением в другую ячейку таблицы. То есть у меня создана таблица, с днями недели по горизонтали, и временем суток по вертикали, и в идеале хотелось бы получить такой вариант.
<table><tr> <td>{RCL-UM:ponedelnik|Утро}</td> <td>{RCL-UM:ponedelnik|День}</td> <td>{RCL-UM:ponedelnik|Вечер}</td> .............................. ............................ </tr><table>и т.д.
То есть чтоб вот значение это было только в ячейке "Понедельник, Утро" следующее значение в ячейке "Понедельник, День", А если это поле пусто, не выбрано, то и выводится в ячейке таблицы пустое значение.
P.S. Вот пытался реализовать этот принцип через построение массивов произвольных полей, отдельных для каждого значения, то есть для понедельника создавалось 4 массива, каждый c единственным чекбоксом (у 1го-Утро, 2го-День и так далее).
И тогда в каждой ячейке таблицы писал {RCL-UM:pn_utro} (для другого времени суток свои метакеи естественно) Ну и всё себе спокойно выводилось как надо. Но уткнулся в проблему с поиском дополнения юзерс фильтр по подобному построению произвольных полей. Крайне неудобно, занимает кучу места, вобщем, подумал, что вернее будет создавать простой человеческий массив с несколькими значениями а не 28 отдельных массивов для каждого времени суток на каждый день недели, ну и выводить уже в ячейках таблицы по значению заполненного чекбокса. Спасибо за внимание. Давайте попробуем решить задачу.
для начала надо в цикле переменную $meta разбивать на две части через $meta = explode('|', $meta);
потом написать замену для get_the_author_meta( $meta, $rcl_office )
, запрос к БД, который будет искать $meta[1]
у поля с meta_key равному $meta[0]
Если есть возможность, напишите пожалуйста как это будет выглядеть в коде? По поводу $meta так я понял?
function rcl_filter_custom_tab_usermetas( $content ) { global $rcl_office; preg_match_all( '/{RCL-UM:([^}]+)}/', $content, $metas ); if ( ! $metas[1] ) return $content; $vars = array(); $replaces = array(); foreach ( $metas[1] as $meta ) { $meta = explode('|', $meta); ВОТ ТУТ МЕТА СТАВИМ????? $vars[] = '{RCL-UM:' . $meta . '}'; $value = ($value = get_the_author_meta( $meta, $rcl_office )) ? $value : __( '', 'wp-recall' ); if ( is_array( $value ) ) { $value = implode( ', ', $value ); } $replaces[] = $value; } return str_replace( $vars, $replaces, $content ); }