私のマルチサイトネットワーク上で、特定のpost_typeについて投稿された投稿が少なくとも1つあるランダムなブログを見つけ、そのblogidを変数として返してswitch_to_blog()
呼び出しで使えるようにする必要があります。
このシナリオで$ randomblog変数を作成する方法を理解する必要があります(現在のSQLクエリは偽物です)。
// Find a random blog that has at least one post of post_type published and return its blogid as $randomblog
$randomblog = $wpdb->get_results($wpdb->prepare("SELECT (1 random blogid) FROM $wpdb->blogs WHERE at least 1 of post_type = 'special' exists "));
// Switch to the random blog
switch_to_blog($randomblog);
(do some fun stuff)
// Switch back to the current blog
restore_current_blog();
よくわかりませんが、私が見つけたこのコードは、必要に応じて変更できる可能性があると思います。どうやっていいのかわからない:
global $wpdb;
global $table_prefix;
// get an array of the table names that our posts will be in
// we do this by first getting all of our blog ids and then forming the name of the
// table and putting it into an array
$rows = $wpdb->get_results( "SELECT blog_id from $wpdb->blogs WHERE
public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" );
if ( $rows ) :
$blogPostTableNames = array();
foreach ( $rows as $row ) :
$blogPostTableNames[$row->blog_id] = $wpdb->get_blog_prefix( $row->blog_id ) . 'posts';
endforeach;
// now we need to do a query to get all the posts from all our blogs
// ordered by the number of comments and with limits applied
if ( count( $blogPostTableNames ) > 0 ) :
$query = '';
$i = 0;
foreach ( $blogPostTableNames as $blogId => $tableName ) :
if ( $i > 0 ) :
$query.= ' UNION ';
endif;
$query.= " SELECT ID, post_type, $blogId as `blog_id` FROM $tableName WHERE post_type = 'Prompt' AND post_status = 'publish' ";
$i++;
endforeach;
$rows = $wpdb->get_results( $query );
// now we need to get each of our posts into an array and return them
if ( $rows ) :
$posts = array();
foreach ( $rows as $row ) :
$posts[] = get_blog_post( $row->blog_id, $row->ID );
endforeach;
print_r($posts);
return $posts;
echo ('<br /><br />');
endif;
endif;
endif;
すべてのブログID、get_posts( array( 'numberposts' => 1 ) )
の結果、およびget_posts
の結果がゼロと異なる最初のものをマークしたランダムな配列をリストする管理者通知を表示する例。
更新後:
add_action( 'admin_notices', 'wpse_60401_print_random_blog' );
function wpse_60401_print_random_blog()
{
global $wpdb;
$rows = $wpdb->get_results( $wpdb->prepare( "SELECT blog_id from $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" ) );
if( !$rows )
{
echo '<div class="error">No blogs found (!)</div>';
}
else
{
shuffle( $rows );
$counter = 0;
echo '<div class="error">';
foreach ( $rows as $row )
{
switch_to_blog( $row->blog_id );
$get_posts = get_posts( array( 'numberposts' => -1 ) );
echo 'Blog ID: ' . $row->blog_id . ' - Number posts: ' . count($get_posts) . '<br />';
if( count($get_posts) != 0 && $counter == 0 )
{
echo 'First blog with a post: ' . $row->blog_id . '<br />';
$counter++;
}
restore_current_blog();
}
echo '</div>';
}
}
function get_random_blog()
{
global $wpdb;
$rows = $wpdb->get_results( $wpdb->prepare( "SELECT blog_id from $wpdb->blogs WHERE public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0';" ) );
if( !$rows )
{
return 0;
}
else
{
shuffle( $rows );
foreach ( $rows as $row )
{
switch_to_blog( $row->blog_id );
$get_posts = get_posts( array( 'numberposts' => -1 ) );
if( count($get_posts) != 0 )
{
restore_current_blog();
return $row->blog_id;
}
}
}
restore_current_blog();
return 0;
}