Запуск WP_Query в классе вызывает неназванный объект WP_Query

Я должен выполнить ряд запросов и изменить значения, возвращаемые в зависимости от мета пользователя.
Я решил повысить уровень и попытаться сделать это, используя объектно-ориентированное программирование, поэтому у меня есть класс для извлечения данных, и я планирую создавать классы, которые присущи и изменяют данные в зависимости от мета пользователя.

Первоначально у меня был экземпляр WP_Query, вызванный из процедурной функции, и он дал мне такой результат:

BreakFastQuery from FunctionWP_Query Object

Когда я повторяю функцию внутри моего класса, я получаю такой вывод:

WP_Query Object

Содержимое этих двух объектов идентично, но поскольку второй объект является неназванным экземпляром, я не могу получить к нему доступ, и мой цикл не возвращает сообщений, несмотря на то, что в этом экземпляре WP_Query содержатся объекты записей.

Вот класс, который содержит функцию с запросом и цикл.

Кто-нибудь знает, как я могу получить доступ к содержимому объекта, который генерирует этот экземпляр WP_Query, или, альтернативно, дать экземпляру имя переменной, на которую я могу ссылаться. Я предполагал, что запрос будет работать точно так же внутри класса, и поэтому мой экземпляр запроса WP будет называться $ food_type_query. Вместо этого $ food_type_query содержит безымянный экземпляр WP_Query и разрушает мой день.

class mealQuery {



function __construct( $query_type ) {
$this->dietPlanQuery( $query_type );
}



public function dietPlanQuery ( $mealType ) {
$ids = get_field($mealType);

$meal_type_query = new WP_Query(array(
'post_type'         => 'recipe',
'posts_per_page'    => 4,
'post__in'          => $ids,
'post_status'       => 'any',
'orderby'       => 'post__in',
));


// The Loop
if ( $meal_type_query->have_posts() ) {
echo '<ul>';
while ( $meal_type_query->have_posts() ) {
$meal_type_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
echo 'FAIL';
}
/* Restore original Post Data */
wp_reset_postdata();





echo '<pre>';
print_r($meal_type_query);
echo '</pre>';
//close dietPlanQuery
}
//close the class
}

0

Решение

Удалить вызов функции из constructor и вызвать функцию вручную.

class mealQuery {



function __construct( ) {
//Do nothing
}



public function dietPlanQuery ( $mealType ) {
$ids = get_field($mealType);

$meal_type_query = new WP_Query(array(
'post_type'         => 'recipe',
'posts_per_page'    => 4,
'post__in'          => $ids,
'post_status'       => 'any',
'orderby'       => 'post__in',
));

/* Comment the loop since it will be used later
// The Loop
if ( $meal_type_query->have_posts() ) {
echo '<ul>';
while ( $meal_type_query->have_posts() ) {
$meal_type_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
echo 'FAIL';
}

wp_reset_postdata();
loop ends */





echo '<pre>';
print_r($meal_type_query);
echo '</pre>';
//close dietPlanQuery
}
//close the class
}

А затем вызовите функцию следующим образом:

$instance = new mealQuery();
$myData = $instance->dietPlanQuery('hi');
print_r($myData);

Это будет держать ваши данные.
И чтобы пройти через это, вы можете использовать цикл WP_Query, как обычно:

if ( $myData->have_posts() ) {
echo '<ul>';
while ( $myData->have_posts() ) {
$myData->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
echo 'FAIL';
}
/* Restore original Post Data */
wp_reset_postdata();
0

Другие решения

Спасибо за попытку помочь парням, но, видимо, вы просто не можете помочь глупым.
Это оказалось полностью ошибкой пользователя.
$ ids = get_field ($ foodType);
Должно было:
$ ids = get_field ($ foodType, false, false);

Я неправильно прочитал документацию и подумал, что значения по умолчанию были ложными, поэтому я не включил их.
На самом деле это значение по умолчанию true, что означало, что мой запрос был по существу неправильным, и поэтому я не мог получить доступ к данным обычным способом.
Извиняюсь.
Спасибо за вашу помощь.
Оказывается, вы были совершенно правы, я просто запутался, когда получал доступ к мета из ACF.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector