-
投稿者投稿
-
2024年6月11日 5:16 AM #140046
いろいろご提案いただいて恐縮です。
わたしの知識では、一覧のソートと同じ程度のコードで並び変えできたらなという希望的観測で
聴いておりました。でも根は深いのですねご提案いただいたプラグイン、たしかに一括ソートがついてるようでした
ただ、ソートキーの設定にWordPressのコアを指定しないといけないような画面もあったので
わたしに使い切れるかわかりません。編集長に相談して別セクションのエンジニアにバトンタッチすることになりました
エンジニアがいままでいただいた情報を拝見して、コードを書くか、プラグインを買うことを
編集長に提案するかになります。編集長は1日もあればコード架けるだろう的に気楽に構えていて
プラグインに投資しようとしないので、いや、そんな簡単なことじゃないと伝えますエンジニアも普段カスタムテーマをメンテナンスしていて、Snow Monkeyは初めてなのです
もしかしたら、自分でコード書いてみたいというかもしれませんまだサイトが収益化できておらず、わたしもエンジニアも副業での参加なので、
なかなか有料プラグインの許可がおりないですいったんわたしの手をはなします
エンジニアがコードを書いた場合は、極力コミュニティに戻せるように頼んでみますまずはここまでありがとうございました。
2024年8月27日 7:06 PM #141305ご連絡おくれてすみません
現在校正作業をしながら、ソートキーを付与する作業をしています。
現在50% これがおわったら、Advanced Post Types Orderを購入して
試して見たいと思ってますそれまでトピックを開いたままにさせて下さい
♥ 0Who liked: No user2024年10月29日 1:33 PM #142416こちら、やっと購入した、指定のプラグインをつかったのですが
一覧ページではソートできたものの、ページめくりはかわりませんでしたどうもページめくりは、ソートとは関係ない?? いや取り出す順番はソートですよね
ChatGPTで作成したコードだと、次へはOKだけど、前へはダメでした
アイキャッチが飛ぶのは別に問題なし、なんらかの色にCSSでできれば充分ですこのコードがうまくいったのか分からないのですが参考までにアップします
— ここから —
前のコードに戻しつつ、前の項目が常に最初のものになってしまう問題を解決する方法に焦点を当てて修正します。meta_compareやmeta_valueの使い方に加え、カスタムフィールドの順番取得が安定するように再調整します。
以下は、前々のコードの基本構造を保持しつつ、改善を加えた修正版です。
// furigana に基づいて次または前の投稿を取得する関数 function get_adjacent_post_by_furigana($direction = 'next') { global $post; // 現在の投稿の 'furigana' 値を取得 $current_furigana = get_post_meta($post->ID, 'furigana', true); // クエリの方向を決定 $order = ($direction === 'next') ? 'ASC' : 'DESC'; $comparison_operator = ($direction === 'next') ? '>' : '<'; // furigana のカスタムフィールドを基に前後の記事を取得 $args = array( 'post_type' => $post->post_type, 'posts_per_page' => 1, 'meta_key' => 'furigana', 'meta_value' => $current_furigana, 'meta_compare' => $comparison_operator, 'orderby' => 'meta_value', 'order' => $order, 'meta_type' => 'CHAR', // furiganaは文字列型として扱う 'suppress_filters' => false, // カスタム投稿タイプなどに対応 'fields' => 'ids', // ID のみを取得 ); // クエリ実行 $adjacent_posts = get_posts($args); // 結果があればその投稿の ID を返す if (!empty($adjacent_posts)) { return $adjacent_posts[0]; // 次または前の投稿を返す } return null; // 結果がなければ null を返す } // カスタムフィールド 'furigana' に基づいて前後リンクをカスタマイズする関数 function custom_adjacent_post_link($output, $format, $link, $post, $adjacent) { // クエリの方向を設定 $direction = ($adjacent === 'next') ? 'next' : 'prev'; // カスタムクエリで次または前の投稿を取得 $adjacent_post_id = get_adjacent_post_by_furigana($direction); if ($adjacent_post_id) { $adjacent_link = get_permalink($adjacent_post_id); $adjacent_title = get_the_title($adjacent_post_id); // リンクを生成 $link_format = '<a href="' . esc_url($adjacent_link) . '">' . esc_html($adjacent_title) . '</a>'; $output = str_replace('%link', $link_format, $format); } return $output; } // フィルターを使用して前後リンクをカスタマイズ add_filter('next_post_link', 'custom_adjacent_post_link', 10, 5); add_filter('previous_post_link', 'custom_adjacent_post_link', 10, 5);
改良点の説明
1. 基本ロジックを保持: 前のコードのロジックを維持し、furiganaカスタムフィールドに基づいた投稿の前後リンクを取得するようにしています。
2. 前の投稿が最初のものにならないように修正: meta_compareとmeta_valueの使い方を保持しつつ、クエリの順序を適切に調整することで、前の投稿が常に最初のものにならないようにしています。
3. 最適化のためのフィルタリング: posts_per_pageを1に設定して、常に1件だけ(前または次)の投稿を取得するようにしています。デザインに影響しないようなリンク生成
テンプレートをいじれない前提のため、WordPressのフィルターを使ってnext_post_linkとprevious_post_linkを置き換え、適切に前後のリンクを表示する方法を採用しています。
動作確認
これで、前後の投稿がfuriganaカスタムフィールドに基づいて正しく取得されることを期待しています。
—
次へは大丈夫ですが、前へがダメです。ただ夜も遅くなったので、いったんここまでにしましょう。もう一歩なのですが
♥ 0Who liked: No user2024年11月6日 2:28 AM #142534ご提案いただいた
並び替えプラグイン
Advanced Post Types Orderを購入してソートしてみたのですが、一覧はソートされたけど
ページめくりは仕組みがちがうようで並び替えされませんでした現在ページめくりをCSSで非表示にしてます。
これ投稿のページめくりを50音順にするのは結構難しいでしょうか?
♥ 0Who liked: No user2024年11月6日 1:17 PM #142550前述したように難しい部類のカスタマイズだと思います。
↑前回共有したページですが、ここに
get_adjacent_post()
のコードが書いてあります。コードを読むと、get_posts()
ではなく SQL で前後の投稿を取得しているのわかるかと思います。SQL のソート部分にフィルターフックが仕込んであって、
apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $post, $order );
のようになっているので、カスタマイズするならここなのかなと想像しています。Advanced Post Types Order の機能の詳細がわかりませんが、Advanced Post Types Order で並び替えたときに各投稿の
menu_order
が適宜更新されるのであれば、上記のフックでpost_date
ではなくmenu_order
を基準にソートするようにさせることで実現できるかもしれません。もしそれが無理であれば完全に自作するレベルになると思うので、どなたかに依頼して開発してもらうのが良いのではないかと個人的には思います。
♥ 0Who liked: No user2024年11月6日 11:10 PM #142573前後のリンクそれぞれにSQLへのコールが埋め込まれているということですね。
そうすると、単純なソートの問題ではなくなるので難しいことはわかりました。編集長にこの件を説明して、まずは前後リンクを無くすこと。
どうしても前後リンクがほしければ、エンジニアチームにスレッドをよんでもらって
バトンタッチすることにします。UXデザイナーの範疇を超えてると判断しましたAdvanced Post Types Orderも結構,複雑なプラグインなので
どういう動作の仕組みなのかわかりません。わたしがもう少しコードを書ければ
好奇心はあるんですけど…ありがとうございました。
ご返事いただいてクローズにしたいと思います♥ 0Who liked: No user2024年11月11日 6:02 AM #142633別スレッドに移動したので閉じます
♥ 0Who liked: No user -
投稿者投稿
- トピック「投稿したのページめくりの順番を変えたい」には新しい返信をつけることはできません。