6 ответ(ов) в теме
daniablag
не в сети 2 месяца
На сайте с 12.02.2015
Участник
Тем 29
Сообщения 97
1
18:36
Версия WP-Recall: 16.18.1

Здравствуйте. Уже поднимал недавно тему по поводу вывода {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 ); нужно будет подкоректировать. Подскажите пожалуйста мужики.

0
Андрей CS
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 14823
2
19:40

я не совсем понял, что должно находится и по каким данным?

0
daniablag
не в сети 2 месяца
На сайте с 12.02.2015
Участник
Тем 29
Сообщения 97
3
20:07

Допустим создано произвольное поле типа чекбокс с метакеем 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 отдельных массивов для каждого времени суток на каждый день недели, ну и выводить уже в ячейках таблицы по значению заполненного чекбокса. Спасибо за внимание. Давайте попробуем решить задачу.

0
daniablag
не в сети 2 месяца
На сайте с 12.02.2015
Участник
Тем 29
Сообщения 97
4
00:29

Если что то было непонятно, скажите, попробую подробнее объяснить. А то ответа не было.

0
Андрей CS
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 14823
5
08:21

для начала надо в цикле переменную $meta разбивать на две части через $meta = explode('|', $meta);
потом написать замену для get_the_author_meta( $meta, $rcl_office ), запрос к БД, который будет искать $meta[1] у поля с meta_key равному $meta[0]

Редакции сообщения
29.01.2020 08:30Андрей CSПричина: не указано
0
daniablag
не в сети 2 месяца
На сайте с 12.02.2015
Участник
Тем 29
Сообщения 97
6
13:22

Если есть возможность, напишите пожалуйста как это будет выглядеть в коде? По поводу $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 );
}

0
Вы не имеете права на публикацию сообщений в этой теме