私は私のマルチサイトサイトネットワークのすべてのサイトを引き込み、それらのACFオプションにある変数を取得するためにそれらを通してループするループを持っています。これは私が使っているコードからの抜粋です。
$stageurl = array();
$args = array(
'public' => true,
'limit' => 500
);
$sites = wp_get_sites($args);
foreach ($sites as $site) {
switch_to_blog($site['blog_id']);
$stage = get_field('stage', 'option');
if (isset($stage)) {
$stageurl[] = $site['domain'];
}
restore_current_blog();
}
foreach ($stageurl as $i => $stages) {
...
}
Wp_get_sitesを使用して、サイトはデフォルトでどのようにソートされますか?
理想的には、foreachループに追加する前に、サイトを作成日順に並べ替えます。ネットワークサイトの作成日を見つけて、それを使って私の$ stageurl配列をソートすることは可能ですか?
get_sites()
を使用するWP 4.6ではwp_get_sites()
は deprecated になるようです。
新しい置き換え は次のとおりです。
function get_sites( $args = array() ) {
$query = new WP_Site_Query();
return $query->query( $args );
}
get_posts()
とWP_Query
と非常によく似ています。
さまざまな便利なパラメータとフィルタをサポートしています。
orderby
name__入力パラメータについての インラインドキュメントの説明 は次のとおりです。
id
name__受け入れる:
id
name__domain
name__path
name__network_id
last_updated
registered
name__domain_length
path_length
site__in
network__in
ORDER BY
句を無効にするには、以下も受け入れます。
false
name__none
name__order
name__パラメーターのデフォルトはDESC
name__です。
以下は、 public sites by registration dateの順序付けを試みる例(未テスト)です。
$mysites = get_sites(
[
'public' => 1,
'number' => 500,
'orderby' => 'registered',
'order' => 'DESC',
]
);
そして最大500のサイトに戻ります。
public
name__パラメーターの ブール値 値に注目してくれた@fostertimeに感謝します。サポートされていません。上記の例ではtrue
name__ではなく1
であるべきです。
そのため、WP_Site_Query
のpublic
name__、archived
name__、mature
name__、spam
name__、およびdeleted
name__属性の boolean 文字列をサポートするためにチケット here (#37937)を提出しました。
@ birgire get_sites()の例が正しい方法です。これをコメントとして追加しただけですが、十分な評判は得られません。
唯一の変更は、publicはブール値ではなく整数値を受け入れることです。 https://developer.wordpress.org/reference/functions/get_sites/ を参照してください。
$mysites = get_sites(
[
'public' => 1,
'number' => 500,
'orderby' => 'id',
'order' => 'ASC',
]
);
私はget_sites
を動かすことができませんでした、それでさらなる文書が新しいバージョンでリリースされるまでここにwp_get_sites
を使う解決策があります。
wp_get_sites
は、作成日や最終更新日など、サブサイトに関する多くのデータを返します。元の$ stageurl配列を多次元配列に変換し、値として登録日を追加しました。返されるデフォルト値は文字列だったので、呼び出す前に時間に変換しました。最後に、私はそれをソートして最新のサイトを最初に、そして最も古いサイトをリストの最後に表示します。
foreach ($sites as $site) {
switch_to_blog($site['blog_id']);
$stage = get_field('stage', 'option');
$registered = strtotime($site['registered']);
if (isset($stage)) {
$stageurl[] = array('domain' => $site['domain'], 'registered' => $registered);
}
restore_current_blog();
}
usort($stageurl, function($a, $b) {
return $b['registered'] - $a['registered'];
});
これは、WP 4.6のサイトおよびWP <4.6を使用しているサイトを実行するための私のコードです。一般の人々が使用するテーマまたはプラグインを作成している場合、それらが使用しているWordPressのバージョンを管理することはできません。
問題は、get_sitesとwp_get_sitesの間のパラメーターの変更だけでなく、WordPress 4.6が戻り値を配列からオブジェクトに変更したことです。したがって、あなたはあなたの要素を異なった方法で参照する必要があります。
ここで私は最初にWP 4.6関数が利用可能であることを確認し、そして最初にオブジェクトバージョンでそれを使用します。それから、4.6以前のwp_get_sitesのチェックに移り、次にその反復を試みます。
// WordPress 4.6
//
if ( function_exists( 'get_sites' ) && class_exists( 'WP_Site_Query' ) ) {
$sites = get_sites();
foreach ( $sites as $site ) {
switch_to_blog( $site->blog_id );
// do something
restore_current_blog();
}
return;
}
// WordPress < 4.6
//
if ( function_exists( 'wp_get_sites' ) ) {
$sites = wp_get_sites();
foreach ( $sites as $site ) {
switch_to_blog( $site['blog_id'] );
// do something
restore_current_blog();
}
return;
}