• 解決済 yamapkomkom

    (@yamapkomkom)


    初めまして。50音順の表示はうまくいったのですが、その50音順から特定の複数のカテゴリーを除外する方法がうまくいきませんでした。下記でcatを除外する記述をしてみたのですが、うまくいきません。

    もしやり方がわかれば幸いです。よろしくお願いいたします。
    書いた記述は下記になります。

    function yomilistFunc( $atts ) {
    // インデックス(行)
    $indexes_parents = array(
    “あ行” => “[ア-オ]”,
    “か行” => “[カ-コ]”,
    “さ行” => “[サ-ソ]”,
    “た行” => “[タ-ト]”,
    “な行” => “[ナ-ノ]”,
    “は行” => “[ハ-ホ]”,
    “ま行” => “[マ-モ]”,
    “や行” => “[ヤ-ヨ]”,
    “ら行” => “[ラ-ロ]”,
    “わ行” => “[ワ-ン]”,
    “その他” => “.*”
    );
    // インデックス(50音)
    $indexes = array(
    “ア” => “[ア]”, “イ” => “[イ]”, “ウ” => “[ウ]”, “エ” => “[エ]”, “オ” => “[オ]”,
    “カ” => “[カ]”, “キ” => “[キ]”, “ク” => “[ク]”, “ケ” => “[ケ]”, “コ” => “[コ]”,
    “サ” => “[サ]”, “シ” => “[シ]”, “ス” => “[ス]”, “セ” => “[セ]”, “ソ” => “[ソ]”,
    “タ” => “[タ]”, “チ” => “[チ]”, “ツ” => “[ツ]”, “テ” => “[テ]”, “ト” => “[ト]”,
    “ナ” => “[ナ]”, “ニ” => “[ニ]”, “ヌ” => “[ヌ]”, “ネ” => “[ネ]”, “ノ” => “[ノ]”,
    “ハ” => “[ハ]”, “ヒ” => “[ヒ]”, “フ” => “[フ]”, “ヘ” => “[ヘ]”, “ホ” => “[ホ]”,
    “マ” => “[マ]”, “ミ” => “[ミ]”, “ム” => “[ム]”, “メ” => “[メ]”, “モ” => “[モ]”,
    “ヤ” => “[ヤ]”, “ユ” => “[ユ]”, “ヨ” => “[ヨ]”,
    “ラ” => “[ラ]”, “リ” => “[リ]”, “ル” => “[ル]”, “レ” => “[レ]”, “ロ” => “[ロ]”,
    “ワ” => “[ワ]”, “ン” => “[ン]”,
    “その他” => “.*”
    );
    global $post;
    // 記事データを取得
    // 記事の取得条件
    $args = array(
    ‘posts_per_page’ => ‘-1’, // 取得記事数無制限
    ‘post_status’ => ‘publish’, // 公開中
    ‘meta_key’ => ‘yomi’, // カスタムフィールドyomiを持っている記事
    ‘meta_value’ => ”, // カスタムフィールドyomiの値は指定しない
    ‘orderby’ => meta_value, // カスタムフィールドyomiの値を基準に並び替え
    ‘order’ => asc, // 昇順に並び替え
    ‘cat’ => -29,-33,-38,-37,-36,-35,-34,-27,-28,-32,-30,-31,-18 // カテゴリー除外
    );
    $my_posts = get_posts($args); // 上記条件で記事を取得
    $post_data_set = array(); // 配列$post_data_setを用意
    // 上記条件の投稿があるなら
    if ($my_posts) {
    foreach ($my_posts as $post) : // ループスタート
    setup_postdata($post); // get_the_title() などのテンプレートタグを使えるようにする
    // ヨミガナの1文字目を取得する(濁点、半濁点は分離)
    $yomi = get_post_meta($post->ID, ‘yomi’, true); // カスタムフィールドyomiの値を取得
    $yomi_conv = mb_convert_kana($yomi, ‘k’, ‘UTF-8’); // 全角カタカナを半角カタカナに変換(濁点、半濁点を分離)
    $yomi_conv = mb_convert_kana($yomi_conv, ‘K’, ‘UTF-8’); // 半角カタカナを全角カタカナに変換
    $yomi_first = mb_substr($yomi_conv, 0, 1); // 先頭の1文字を取得
    // 配列に格納する
    $posts[‘title’] = get_the_title(); // タイトル
    $posts[‘permalink’] = get_permalink(); // URL
    $posts[‘yomi’] = $yomi; // ヨミガナ
    $posts[‘yomi_first’] = $yomi_first; // ヨミガナ1文字目
    $post_data_set[] = $posts; // 配列に格納
    endforeach; // ループ終わり
    }
    // インデックス(50音)ごとの配列に格納する
    $post_data_set_index = array();
    foreach ( $post_data_set as $key => $val) {
    $char = mb_substr( $val[‘yomi_first’], 0, 1);
    foreach ( $indexes as $index => $pattern ) {
    if (preg_match(“/^” . $pattern . “/u”, $char)) {
    $post_data_set_index[$index][] = $post_data_set[$key];
    break;
    }
    }
    }
    // インデックス(行)ごとの配列に格納する
    $post_data_set_index_parent = array();
    foreach ( $post_data_set_index as $key => $val) {
    foreach ( $indexes_parents as $indexes_parent => $patterns ) {
    if (preg_match(“/^” . $patterns . “/u”, $key)) {
    $post_data_set_index_parent[$indexes_parent][$key] = $post_data_set_index[$key];
    break;
    }
    }
    }
    // HTML出力
    $output = “”;
    if ($post_data_set_index_parent) {
    // 行ごとに展開
    foreach ($post_data_set_index_parent as $indexes_parent => $posts) : // ループスタート
    $output .= ‘<h2 class=”shokyugyolisttitle”>’.$indexes_parent. ‘</h2>’;
    // 50音ごとに展開
    foreach ($posts as $index => $post) : // ループスタート
    $output .= ‘<h3 class=”shokyugyolisttitlehiragana”>’.$index.'</h3>’;
    $output .= ‘<ul class=”shokugyolist”>’ . “\n”;
    foreach ($post as $key => $val) {
    $output .= ‘<li class=”page_item page-item-7″>’;
    $output .= ‘‘ .$val[‘title’]. ‘‘;
    $output .= ‘‘ . “\n”;
    }
    $output .= ‘‘ . “\n”;
    endforeach; // ループ終わり
    endforeach; // ループ終わり
    }
    // クエリのリセット
    wp_reset_postdata();
    return $output;
    }
    add_shortcode(‘yomilist’, ‘yomilistFunc’);

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    下記でcatを除外する記述をしてみたのですが、うまくいきません。

    具体的にどううまくいかないのでしょうか?
    とりあえず、下記のように変更してみてはどうでしょうか?

    'orderby' => meta_value, // カスタムフィールドyomiの値を基準に並び替え
    'order' => asc, // 昇順に並び替え
    'cat' => -29,-33,-38,-37,-36,-35,-34,-27,-28,-32,-30,-31,-18 // カテゴリー除外
    );

    'orderby' => 'meta_value',
    'order' => 'ASC',
    'cat' => array( -29,-33,-38,-37,-36,-35,-34,-27,-28,-32,-30,-31,-18 )
    );

    デバッグモードを有効にしてエラーなどを確認してみてはと思います。
    http://wpdocs.osdn.jp/WordPressでのデバッグ

    なお、このフォーラムでコードを貼り付ける場合は、コードを選択し [code] ボタンをクリック(逆クォートで囲む)してください。
    詳細は、下記ページをご覧ください。
    https://wpdocs.osdn.jp/フォーラムへようこそ#.E3.82.B3.E3.83.BC.E3.83.89.E3.81.AE.E6.8A.95.E7.A8.BF

    トピック投稿者 yamapkomkom

    (@yamapkomkom)

    ishitaka様

    ありがとうございました。教えてくださった設定で50音順に一覧を表示し、かつ指定したカテゴリーをその一覧に非表示にすることに成功しました。

    'orderby' => 'meta_value',
    'order' => 'ASC',
    'cat' => array( -29,-33,-38,-37,-36,-35,-34,-27,-28,-32,-30,-31,-18 )
    );

    またデバッグ方法やコードの書き方も教えていただきありがとうございます。
    感謝いたします!

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「50音順に一覧表示しながら特定のカテゴリーを除外する方法」には新たに返信することはできません。