0

wordpress でホストされているサイトの兄弟ページを通過する方法を見つけようとしています。少し検索した後、これをfunctions.phpに入れることがわかりました:

function siblings($link) {
global $post;
$siblings = get_pages('child_of='.$post->post_parent.'&parent='.$post->post_parent);
foreach ($siblings as $key=>$sibling){
    if ($post->ID == $sibling->ID){
        $ID = $key;
    }
}
$closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));

if ($link == 'before' || $link == 'after') { echo $closest[$link]; } else { return $closest; } }

それは私が必要とするものにほぼ完璧です。唯一の問題は次のとおりです。

  1. それらはアルファベット順にソートされ、注文番号でソートする必要があります
  2. 終了するだけでなく、ループする必要があります(したがって、最後のページが最初のページにリンクします)
  3. 自動的に「Previous of Next」と表示されますが、その「of」を削除したいと思います

3つの問題のいずれかについて誰かが意見を持っていれば、私はそれを大いに感謝します. 私は自分自身をいじくり回していますが、あなたのほとんどはおそらく私よりもはるかに優れていると思いました. それと、「500 サーバー エラー」が何度も発生しました。

ありがとう

4

1 に答える 1

3

変更したコードは次のとおりです。最初の 2 つの要求を解決します。最後のものは、提供されたコードの一部ではありません。このコードは、言及された単語のいずれも生成しません。パーマリンクをエコーするか返すだけです。

function siblings($link) {
global $post;
$siblings = get_pages('child_of='.$post->post_parent.'&parent='.$post->post_parent.'&sort_column=menu_order');
foreach ($siblings as $key=>$sibling){
    if ($post->ID == $sibling->ID){
        $ID = $key;
    }    
}

if( $ID == 0 ){
    $closest = array('before'=>get_permalink($siblings[count($siblings)-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));  
}elseif( $ID == count($siblings)-1 ){
    $closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[0]->ID));
}else{
    $closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));   
}

if ($link == 'before' || $link == 'after') { echo $closest[$link]; } else { return $closest; } }

編集:最初のリクエストを解決するために get_pages 引数に&sort_column=menu_orderを追加しました

于 2013-01-27T18:30:15.230 に答える