admin管理员组文章数量:1130349
I am attempting to loop through all sites on my multisite network blog. However, when I attempt to use get_pages it ignores the fact that the blog has switched via switch_to_blog.
$sites = wp_get_sites( array( 'limit' => 1000 ) );
foreach ( $sites as $site ) {
$blog_id = intval( $site['blog_id'] );
if ( $blog_id < 2 ) {
continue;
}
switch_to_blog( $blog_id );
$pages = get_pages( array(
'sort_order' => 'asc',
'sort_column' => 'ID',
'post_type' => 'page',
'post_status' => 'publish',
) );
echo 'Blog ID: ' . get_current_blog_id() . ' | Total Pages: ' . count ( $pages ) . '<br>';
// foreach( $pages as $page ) {
// echo 'Blog ID: ' . $blog_id . ' | Post ID: ' . $page->ID . '<br>';
// }
restore_current_blog();
}
Output:
Blog ID: 2 | Total Pages: 71
Blog ID: 3 | Total Pages: 71
Blog ID: 4 | Total Pages: 71
Blog ID: 5 | Total Pages: 71
Blog ID: 6 | Total Pages: 71
Blog ID: 7 | Total Pages: 71
Blog ID: 8 | Total Pages: 71
Blog ID: 9 | Total Pages: 71
Blog ID: 10 | Total Pages: 71
Blog ID: 11 | Total Pages: 71
Blog ID: 12 | Total Pages: 71
Blog ID: 13 | Total Pages: 71
Blog ID: 14 | Total Pages: 71
Blog ID: 15 | Total Pages: 71
Blog ID: 16 | Total Pages: 71
Blog ID: 17 | Total Pages: 71
Blog ID: 18 | Total Pages: 71
Blog ID: 19 | Total Pages: 71
Blog ID: 20 | Total Pages: 71
The script above will var_dump the same $pages through out the entire loop, regardless of which blog it switches to. What exactly am I doing wrong, and is there a way to accomplish what I'm attempting to do?
I am attempting to loop through all sites on my multisite network blog. However, when I attempt to use get_pages it ignores the fact that the blog has switched via switch_to_blog.
$sites = wp_get_sites( array( 'limit' => 1000 ) );
foreach ( $sites as $site ) {
$blog_id = intval( $site['blog_id'] );
if ( $blog_id < 2 ) {
continue;
}
switch_to_blog( $blog_id );
$pages = get_pages( array(
'sort_order' => 'asc',
'sort_column' => 'ID',
'post_type' => 'page',
'post_status' => 'publish',
) );
echo 'Blog ID: ' . get_current_blog_id() . ' | Total Pages: ' . count ( $pages ) . '<br>';
// foreach( $pages as $page ) {
// echo 'Blog ID: ' . $blog_id . ' | Post ID: ' . $page->ID . '<br>';
// }
restore_current_blog();
}
Output:
Blog ID: 2 | Total Pages: 71
Blog ID: 3 | Total Pages: 71
Blog ID: 4 | Total Pages: 71
Blog ID: 5 | Total Pages: 71
Blog ID: 6 | Total Pages: 71
Blog ID: 7 | Total Pages: 71
Blog ID: 8 | Total Pages: 71
Blog ID: 9 | Total Pages: 71
Blog ID: 10 | Total Pages: 71
Blog ID: 11 | Total Pages: 71
Blog ID: 12 | Total Pages: 71
Blog ID: 13 | Total Pages: 71
Blog ID: 14 | Total Pages: 71
Blog ID: 15 | Total Pages: 71
Blog ID: 16 | Total Pages: 71
Blog ID: 17 | Total Pages: 71
Blog ID: 18 | Total Pages: 71
Blog ID: 19 | Total Pages: 71
Blog ID: 20 | Total Pages: 71
The script above will var_dump the same $pages through out the entire loop, regardless of which blog it switches to. What exactly am I doing wrong, and is there a way to accomplish what I'm attempting to do?
2 Answers
Reset to default 0Try using get_posts instead of get_pages
$pages = get_posts( array(
'order' => 'ASC',
'orderby' => 'ID',
'post_type' => 'page',
'post_status' => 'publish',
) );
Question is old, but for anyone with similar issue, this should work for you:
<?php
$sites = get_sites([
'number' => 9999,
]);
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
$pages = get_pages();
echo count($pages);
restore_current_blog();
}
wp_get_sites was deprecated in 4.6 in favor of get_sites
I am attempting to loop through all sites on my multisite network blog. However, when I attempt to use get_pages it ignores the fact that the blog has switched via switch_to_blog.
$sites = wp_get_sites( array( 'limit' => 1000 ) );
foreach ( $sites as $site ) {
$blog_id = intval( $site['blog_id'] );
if ( $blog_id < 2 ) {
continue;
}
switch_to_blog( $blog_id );
$pages = get_pages( array(
'sort_order' => 'asc',
'sort_column' => 'ID',
'post_type' => 'page',
'post_status' => 'publish',
) );
echo 'Blog ID: ' . get_current_blog_id() . ' | Total Pages: ' . count ( $pages ) . '<br>';
// foreach( $pages as $page ) {
// echo 'Blog ID: ' . $blog_id . ' | Post ID: ' . $page->ID . '<br>';
// }
restore_current_blog();
}
Output:
Blog ID: 2 | Total Pages: 71
Blog ID: 3 | Total Pages: 71
Blog ID: 4 | Total Pages: 71
Blog ID: 5 | Total Pages: 71
Blog ID: 6 | Total Pages: 71
Blog ID: 7 | Total Pages: 71
Blog ID: 8 | Total Pages: 71
Blog ID: 9 | Total Pages: 71
Blog ID: 10 | Total Pages: 71
Blog ID: 11 | Total Pages: 71
Blog ID: 12 | Total Pages: 71
Blog ID: 13 | Total Pages: 71
Blog ID: 14 | Total Pages: 71
Blog ID: 15 | Total Pages: 71
Blog ID: 16 | Total Pages: 71
Blog ID: 17 | Total Pages: 71
Blog ID: 18 | Total Pages: 71
Blog ID: 19 | Total Pages: 71
Blog ID: 20 | Total Pages: 71
The script above will var_dump the same $pages through out the entire loop, regardless of which blog it switches to. What exactly am I doing wrong, and is there a way to accomplish what I'm attempting to do?
I am attempting to loop through all sites on my multisite network blog. However, when I attempt to use get_pages it ignores the fact that the blog has switched via switch_to_blog.
$sites = wp_get_sites( array( 'limit' => 1000 ) );
foreach ( $sites as $site ) {
$blog_id = intval( $site['blog_id'] );
if ( $blog_id < 2 ) {
continue;
}
switch_to_blog( $blog_id );
$pages = get_pages( array(
'sort_order' => 'asc',
'sort_column' => 'ID',
'post_type' => 'page',
'post_status' => 'publish',
) );
echo 'Blog ID: ' . get_current_blog_id() . ' | Total Pages: ' . count ( $pages ) . '<br>';
// foreach( $pages as $page ) {
// echo 'Blog ID: ' . $blog_id . ' | Post ID: ' . $page->ID . '<br>';
// }
restore_current_blog();
}
Output:
Blog ID: 2 | Total Pages: 71
Blog ID: 3 | Total Pages: 71
Blog ID: 4 | Total Pages: 71
Blog ID: 5 | Total Pages: 71
Blog ID: 6 | Total Pages: 71
Blog ID: 7 | Total Pages: 71
Blog ID: 8 | Total Pages: 71
Blog ID: 9 | Total Pages: 71
Blog ID: 10 | Total Pages: 71
Blog ID: 11 | Total Pages: 71
Blog ID: 12 | Total Pages: 71
Blog ID: 13 | Total Pages: 71
Blog ID: 14 | Total Pages: 71
Blog ID: 15 | Total Pages: 71
Blog ID: 16 | Total Pages: 71
Blog ID: 17 | Total Pages: 71
Blog ID: 18 | Total Pages: 71
Blog ID: 19 | Total Pages: 71
Blog ID: 20 | Total Pages: 71
The script above will var_dump the same $pages through out the entire loop, regardless of which blog it switches to. What exactly am I doing wrong, and is there a way to accomplish what I'm attempting to do?
2 Answers
Reset to default 0Try using get_posts instead of get_pages
$pages = get_posts( array(
'order' => 'ASC',
'orderby' => 'ID',
'post_type' => 'page',
'post_status' => 'publish',
) );
Question is old, but for anyone with similar issue, this should work for you:
<?php
$sites = get_sites([
'number' => 9999,
]);
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
$pages = get_pages();
echo count($pages);
restore_current_blog();
}
wp_get_sites was deprecated in 4.6 in favor of get_sites
本文标签: multisiteHow to get all pages on specific blog after switchtoblog
版权声明:本文标题:multisite - How to get all pages on specific blog after switch_to_blog? 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/questions/1749188418a2329778.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论