Я должен выполнить ряд запросов и изменить значения, возвращаемые в зависимости от мета пользователя.
Я решил повысить уровень и попытаться сделать это, используя объектно-ориентированное программирование, поэтому у меня есть класс для извлечения данных, и я планирую создавать классы, которые присущи и изменяют данные в зависимости от мета пользователя.
Первоначально у меня был экземпляр 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
}
Удалить вызов функции из 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();
Спасибо за попытку помочь парням, но, видимо, вы просто не можете помочь глупым.
Это оказалось полностью ошибкой пользователя.
$ ids = get_field ($ foodType);
Должно было:
$ ids = get_field ($ foodType, false, false);
Я неправильно прочитал документацию и подумал, что значения по умолчанию были ложными, поэтому я не включил их.
На самом деле это значение по умолчанию true, что означало, что мой запрос был по существу неправильным, и поэтому я не мог получить доступ к данным обычным способом.
Извиняюсь.
Спасибо за вашу помощь.
Оказывается, вы были совершенно правы, я просто запутался, когда получал доступ к мета из ACF.