0

私はワードプレスでビルトされたウェブサイトに取り組んでいます。1 つの親ページの子ページの名前とリンクを含む選択タイプのメニューを含めました。すべて正常に動作し、私のページはアルファベット順に ASC でソートされます:

Bali
Bruxelles
Chicago
Edinburgh
Geneve
Los Angeles
Lyon
Miami
Paris
San Diego
San Francisco
Vancouver
Washington
Zurich

ここに私のコードがあります:

<div class="styled-select">
<?php

if(!$post->post_parent){

    $children = get_pages(array(
        'child_of' => $post->ID,
        'post_type' => 'page',
        'post_status' => 'publish',
        'sort_order' => 'ASC',
        'sort_column' => 'post_title',
    ));

}else{

    $children = get_pages(array(
        'child_of' => $post->post_parent,
        'post_type' => 'page',
        'post_status' => 'publish',
        'sort_order' => 'ASC',
        'sort_column' => 'post_title',
    ));
}

if ($children) {
    echo '<select name="" onchange="location = this.options[this.selectedIndex].value;">';
    echo '<option>'. 'A - Z' .'</option>';

    foreach($children as $child){
        //print_r($child);
        $permalink = get_permalink($child->ID);

        echo '<option value="'.$permalink.'">'.$child->post_title.'</option>';
    }
    echo '</select>';

} ?>

</div>

このように、メニュー内にアルファベット インデックス (推測では幅) を自動的に追加できるかどうかを知りたかったのです。Aで始まるすべてのページの前に「A」を追加し(Aで始まるページがある場合...)、Bで始まるすべてのページの前に「B」を追加します...次のようにする必要があります:

A
B
  Bali
  Bruxelles
C
  Chicago
D
E
F 
  Edinburgh
G
  Geneve
H
I
J
K
L
  Los Angeles
  Lyon
M
  Miami
N
O
P
  Paris
Q
R
S
  San Diego
  San Francisco
T
U
V
  Vancouver
W
  Washington
X
Y
Z
  Zurich

誰かが私にできることを知っていれば、それは大歓迎です! どうもありがとう

マチュー

4

2 に答える 2

1

次のように使用します (デモンストレーションのみ)。

    function getInitials($name){
//split name using spaces
$words=explode(" ",$name);
$inits='';
//loop through array extracting initial letters
    foreach($words as $word){
    $inits.=strtoupper(substr($word,0,1));
    }
return $inits;  
}
$currval = "";
foreach($children as $child){
    //print_r($child);
    $permalink = get_permalink($child->ID);
    $initial = getInitials($child->post_title);
    if($initial!='' && $currval != $initial) {
        $currval = $initial;
        echo '<optgroup>'.$initial.'</option>';
    }
    echo '<option value="'.$permalink.'">'.$child->post_title.'</option>';
}

チェックされていませんが..問題が発生した場合はチェックして返品してください


すべてのアルファベットを表示する必要がある場合は、そうするためのアイデアを提供できます

function getInitials($name){
//split name using spaces
$words=explode(" ",$name);
$inits='';
//loop through array extracting initial letters
    foreach($words as $word){
    $inits.=strtoupper(substr($word,0,1));
    }
return $inits; 
}
$currval = "";


$alp = array('A'...'Z')

foreach($alp as $abc) {
    foreach($children as $child){
        //print_r($child);
        $permalink = get_permalink($child->ID);
        $initial = getInitials($child->post_title);
        if($initial!='' && $currval != $initial && $initial == $abc) {
            $currval = $initial;
            echo '<optgroup>'.$initial.'</option>';
        }
        echo '<option value="'.$permalink.'">'.$child->post_title.'</option>';
    }
}
于 2013-10-02T08:27:50.127 に答える
0

こんにちは、必要に応じてコードを再度編集しました。

チェックしてください

<?php
function getInitials($name){
    //split name using spaces
    $words=explode(" ",$name);
    $inits='';
    //loop through array extracting initial letters
    foreach($words as $word){
        $inits = strtoupper(substr($word,0,1));
        break;
    }
    return $inits; 
}
$currval = "";
$alp = array('A','B','C','D','E','Y','S','Z');
//$children = array('Asin','Bali','Bruxelles','Chicago','Denmark','Edinburgh','Flag','San Francisco');
?>
<select name="test">
<?php
foreach($alp as $key => $abc) {
    $showinOpt = false;
    foreach($children as $child) {
      $permalink = get_permalink($child->ID);
      $initial = getInitials($child->post_title);
       if($initial == $abc) {
           if($currval != $initial) {
                $currval = $initial;
                echo '<optgroup label="'.$initial.'">'.$initial.'</optgroup>';
                $showinOpt = true;
           }
           echo '<option value="'.$permalink.'">'.$child->post_title.'</option>';
        }
    }
    if(!$showinOpt) {
        echo '<optgroup label="'.$abc.'">'.$abc.'</optgroup>';
    }
}
?>
</select>

$children 配列を取得した後にこれを追加するだけです。

于 2013-10-02T11:32:03.590 に答える