Запуск WP_Query в классе вызывает неназванный объект WP_Query - PullRequest
0 голосов
/ 07 ноября 2018

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

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

BreakFastQuery from FunctionWP_Query Object

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

WP_Query Object

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

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

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

<code>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 '
'; // закрыть dietPlanQuery } // закрываем класс }

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

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

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

0 голосов
/ 07 ноября 2018

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

<code>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 '
'; // закрыть dietPlanQuery } // закрываем класс }

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

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...