Задать вопрос
dydikson
@dydikson
Выношу свой мозг всякой вполне очевидной фигней

Как отобразить сумму значений из мета полей постов со статусом 'private'?

Друзья имеется на сайте определенное количество постов, которые имеют статус 'private'. И по логике они не должны быть доступны на всеобщее обозрение кроме автора поста и админстрации сайта. Но на самом сайте необходимо реализовать вывод суммы которая расчитывается исходя из мета полей данный приватных постов. Я написал шорт код который отображает сумму но только в случае если пользователь имеет привелегии администратора. Но мне нужно отобразить сумму для всех без исключения пользователей сайта. Вот мой код:

function RefBackSumma(){
	

// https://wordpress.stackexchange.com/questions/34702/short-code-to-display-a-loop

	$summ_args = array(
	    'post_type' => 'refbek_two',
	    'posts_per_page'   => -1,
	);
	$query = new WP_Query( $summ_args );
	$posts = $query->posts;
	d($posts);
	//
	

	foreach ($posts as $post) {
		// $ Авто расчет рефбека
		//--------------
		$summ = get_post_meta($post->ID, 'avtomaticheskij_rasschet_refbeka_72', true);
//		$NoPrivate = get_post_meta($post->ID, 'avtomaticheskij_rasschet_refbeka_72', true);
		//--------------
		// Выводим 
			// $ Категория валюты вложений
			$cur_terms = get_the_terms( $post->ID, 'RefbekValutaVlogeniy' );
			// $ Для выборки статусов только с оплатой
			$cur_terms_status  = get_post_meta( $post->ID, 'custom_status_ti-checkbox_list_1');
			// $ Сумма с учетом конвертации руб.
			$Summa;
			// Если заявка оплачена (значит имеет статус 'Paid' - Оплачено) начинаем вывод 
			if (in_array('Paid', $cur_terms_status)){
				// $ Для слага категории
				$taxonomyslag = '';
				
				// Если имеется категорий
				if( is_array( $cur_terms) ){
					//-----------------------------------
					// Перебираем
					// Делаем перебор по таксономии
					foreach( $cur_terms as $cur_term ){
						// $ Слаг таксономии
						$taxonomyslag = $cur_term->slug;
						// Если у таксономии имеется слаг 'rub' и она не пуста делим на курс USD - 65 rub
						if($taxonomyslag == 'rub' && $taxonomyslag !== ''){
							// Новая сумма
							$summ = $summ / 65;
							// Добавляем значение в конец массива общей суммы
							$Summa += $summ;
						} else {
							$Summa += $summ;
						}
					}
					//-----------------------------------
					
				}					
		}
		//--------------
	}
	$Summa = round($Summa, 2);
	$FullSumma = $Summa.' USD';

		return $FullSumma;


}

add_shortcode( 'RefBackSumma', 'RefBackSumma' );
// [RefBackSumma]


Сейчас при просмотре страницы от лица гостя отображается 0 USD. Как заставить шорткод отобразить сумму для всех пользователей сайта?
  • Вопрос задан
  • 51 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Внимательно читаем документацию:

post_status (string / array) - use post status. Retrieves posts by Post Status. Default value is 'publish', but if the user is logged in, 'private' is added. Public custom statuses are also included by default. And if the query is run in an admin context (administration area or AJAX call), protected statuses are added too. By default protected statuses are 'future', 'draft' and 'pending'.


То есть, значения по умолчанию вам не подходят и необходимо явно указать необходимые статусы. Минимум:

$args = [
    'post_status' => [ 'publish', 'private' ],
];


Или совсем явно:

$args = [
    'post_status' => 'any',
];


ЗЫ: И не делайте 'posts_per_page' => -1,, это плохая практика. Укажите пусть большое (с запасом), но конкретное число. Например 100, 500, 1000.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы