如何在php中的wp_query循环外传递数组作为变量

时间:2017-12-06 21:05:47

标签: php arrays wordpress loops

有没有办法将数组作为变量传递出wp_query循环?我想从四个帖子中收集帖子元 - 下周和接下来的三周。为了保持代码清洁,我认为最容易捕获变量并在表单中稍后使用数据。

// Capture next week's week number
$nextweek = date("W", strtotime( "+1 week"));

// Query all custom post types
$menu_args = array(
    'post_type'=>'single_menu',
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order' => 'ASC'
    );

    $menu = new WP_Query( $menu_args ); if ( $menu->have_posts() ) : while ( $menu->have_posts() ) : $menu->the_post();

    // Get custom fields
    $menuids = array( get_post_field( 'week', $post->id ) );
    $titles = array( get_post( $post->id )->post_title ); 
    $choosefrom = array( get_post_field( 'menu_listing', $post->id ) );
    $selection = array( get_post_field( $checkout_menu, $post->id ) );

    // Create new array with custom fields  
    $result = array();
    foreach ( $menuids as $id => $menuid ) {
        $result[$menuid] = array(
            'title'  => $titles[$id],
            'offering'  => $choosefrom[$id],
            'menu' => $selection[$id],
            'delivery'    => 0,
        );
    }

    // Return the arrays for specified weeks
    for ($i = $nextweek; $i<$nextweek+4; $i++) {
    if ( $result[$menuid] == $result[$i] ) {
        print_r( $result );
    }
    }

    endwhile;   
    endif;

print_r()会在接下来的四周内返回正确的结果,我的$results数组。但是,当我创建一个变量并在循环外调用它时,如下所示,我只得到数组中的最后/第四个$result

    for ($i = $nextweek; $i<$nextweek+4; $i++) {
    if ( $result[$menuid] == $result[$i] ) {

        $payload = $result;
    }
  }

endwhile;   
endif;

print_r( $payload );

当我像这样创建一个新数组时会发生同样的事情:

    $payload = array();
    for ($i = $nextweek; $i<$nextweek+4; $i++) {
    if ( $result[$menuid] == $result[$i] ) {

        $payload[] = $result;
    }
  }

endwhile;   
endif;

print_r( $payload );

如果我连接像$payload .= $result;这样的变量,我会返回ArrayArrayArrayArray

我知道我可以在循环内部回显表单,但是如果可能的话,宁愿将数组作为数据变量。我错过了一些简单的东西吗?

2 个答案:

答案 0 :(得分:1)

$ result初始化每次循环迭代。您的$结果只包含一个项目。同样认为$ payload变量。 在while循环之外,你只有最后一项。祝你好运

答案 1 :(得分:0)

有时,在$payload = array();之前,我们无法直接看到$menu_args在wp_query之外。const getDataFromApi = (endpoint) => { return new Promise((resolve, reject) => { $.ajax({ url: url, type: "GET", dataType: 'json', headers: {'X-API-Key': 'xxxxxx'}, success: (data) => { return resolve(data); } }); }); }; Promise.all([ return getDataFromApi('https://website.com/api.json'); ]).then((data) => { return Promise.all([ data, getDataFromApi('https://website.com/api2.json') ]); // here your business logic (for loop in your code) }).then((data) => { // with bluebird it's easier use spread const dataApi1 = data[0]; const dataApi2 = data[1]; }) .catch((err) => { console.error(err); });