Cocoonフォーラム

サイト内検索
書き込みの前に以下の3点をご確認ください。
  1. 1つのトピックにつき1つの質問を書き込んでください
  2. 不具合・カスタマイズ対象ページのURLを提示高速化を無効にしてください
  3. 該当部分のキャプチャ・環境情報とともに書き込んでいただけると助かります

何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。

不具合・カスタマイズ対象ページのURL:

相談内容:

不具合の発生手順:

解決のために試したこと:

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。

環境情報の取得方法はこちら。
https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
https://wp-cocoon.com/theme-trouble/

フォーラム利用ガイドリンク

  1. フォーラムガイドライン
  2. よくある質問と答え(FAQ)
  3. サポート対象外のケース
  4. 原因不明の不具合用トラブルシューティング
  5. トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw
  6. 真っ白画面でのエラーメッセージの確認方法
  7. ブラウザ環境チェックツール
  8. Cocoonカスタマイズ依頼

フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。

新着記事ショートコード使用時に記事タイ...
 
共有:
通知
すべてクリア

新着記事ショートコード使用時に記事タイトルで並べ変えたい

7 投稿
2 ユーザー
5 Reactions
57 表示
(@inazuma1114)
New Member Registered
結合: 1日前
投稿: 2
トピックスターター  

素晴らしいテーマを使わせていただいて、ありがとうございます。

カテゴリID:13は単語集です。固定ページにおいて、記事の投稿日、更新日ではなく記事タイトルで並べ変えをおこないたい。

以下のコードを追加し、カテゴリーID:13の場合にタイトルで並べ変えを行います。

function twpp_change_sort_order( $query ) {
  if ( is_admin() || ! $query->is_main_query() ) {
    return;
  }

  // カテゴリーID13のアーカイブページの場合
  if ( $query->is_category(13) ) {
    $query->set( 'order', 'ASC' );
    $query->set( 'orderby', 'title' );
  }
}
add_action( 'pre_get_posts', 'twpp_change_sort_order' );

cocoonのnew_listショートコードでoderを付けない場合にはディフォルトとなりますが、上記のようなカスタムソートを使用することはできませんか?

他の手段でも

 1.記事の並びはタイトル順
 2.大きなサムネイル画像とタイトル、スニペットを表示したい。
 3.記事数が増えた場合には、ページ分けを行いたい。

やりたいこと

 new_listのショートコードでタイトル順記事を表示したい。

20記事毎にベージを分け、次のページでnew_list offset=20でページネーションを作成したい。

以上、よろしくお願いいたします。


   
引用
(@inazuma1114)
New Member Registered
結合: 1日前
投稿: 2
トピックスターター  

html-forms.php内のfunction generate_widget_entries_tagにカテゴリID13でorderbyを書き換えるように変更しました。

お騒がせいたしました。

  if ($order) {
    if (in_array(13, $cat_ids)) {
      $args += array(
        'orderby' => 'title',
        'order' => 'ASC',
      );
    } else {
      $args += array(
        'order' => strtoupper($order),
      );
    }
  }

   
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3288
 

●回答

new_listを用い固定ページを作らなくても、単にカテゴリーID=13のカテゴリー一覧ページをタイトルA-Z順とすればいいのでは?

add_action('pre_get_posts', function ($query) {
  // メインクエリかつ管理画面ではない場合のみ処理
  if (!is_admin() && $query->is_main_query()) {
    // カテゴリー一覧が、カテゴリーID=13のの場合
    if (is_category(13)) {
      $query->set('orderby', 'title');
      $query->set('order', 'ASC'); // 昇順(A→Z)
    }
  }
});

●ご参考

固定ページで作るなら、Gutenbergエディターのクエリーブロックを活用すれば、ブロックの配置だけで、簡単に好みのカテゴリーのページを作成可能です(図は一例です)。


   
わいひら reacted
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3288
 

すみません、回答ずれてますね(苦笑)
new_listの場合もフルターフックがあるので、これで変更します。

add_filter('widget_entries_args', function($args) {
  // カテゴリーが 16 の場合
  if (!empty($args['tax_query'][0][0]['terms']) && in_array(16, (array) $args['tax_query'][0][0]['terms'])) {
    $args['orderby'] = 'title'; // タイトル順
    $args['order'] = 'ASC';     // 昇順(A→Z)
  }
  return $args;
});

   
わいひら reacted
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3288
 

●追記

20記事毎にベージを分け、次のページでnew_list offset=20でページネーションを作成したい。

「次へページ」のように、ボタンクリック毎にページ送りし、表示することは可能です。

恐れ入りますが、注記にも書かれていますが、コードについてはご自身で調べ対応願います。

JavaScript、PHPカスタマイズはサポート対象外させていただいています。


●仕組み

以下の流れで実現します。(コードは約70行)

ボタンクリック(JavaScript)→(Ajax)→new_list実行・返却(PHP)→(Ajax)→new_listの結果でHTML更新(JavaScript)

Gutenbrgエディターで固定ページを作成

  • 「新着記事」ブロックを配置し、例では5ページとし、カテゴリー=13を設定。
  • 「新着記事」ブロックの下に「ボタン」ブロックを配置。

PHP(新着記事の表示順を変更)

  • 前述のコードで「新着記事」のカテゴリー=13をページをタイトルA-Z順にする。

PHP(Ajax関数)

  • wp_ajax_{$action}、wp_ajax_nopriv_{$action}フックを介し、アクションに応じた関数を実行する。
  • アクションに応じた関数で、ページ数を受け取り、new_listのoffsetを求める。
  • [new_list count=5 offset=(ページ数-1) * 表示数5) cats=13]を実行する。
  • 実行した結果をJavaScriptへ返却。

JavaScript

  • 「次へページ」ボタンがクリックされたらクリック回数(ページ数)をカウント。
  • その都度、Ajaxを用い$actionに応じた関数にページ数を送信。
  • Ajaxで返却された、new_listショートコードのHTMLで、元のページを書き換える。
  • Ajaxから返却がない場合、ボタンを非表示。

   
わいひら reacted
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3288
 

●ご参考

独自ショートコードを作成する方法もあります。

new_listの結果に、「次へページ」ボタンと、paginate_links()を用い、ページボタンを追加する方法もあります。
こちらの場合、独自のショートコードなので、並び順のために何かパラメータを操作するということは不要となります。
Ajaxを用いるより、独自ショートコードの方がシンプルです。

先のGutenbergエディターならノーコードで実現できるかと思います。


   
わいひら reacted
返信引用
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3288
 

●追記

 1.記事の並びはタイトル順
 2.大きなサムネイル画像とタイトル、スニペットを表示したい。
 3.記事数が増えた場合には、ページ分けを行いたい。

上記の要件で、カテゴリー13だけは、他の一覧ページと別表示をさせたい?

 new_listのショートコードでタイトル順記事を表示したい。
20記事毎にベージを分け、次のページでnew_list offset=20でページネーションを作成したい。

そのため、固定ページにnew_listを用い別表示とする。


要件を纏めると、固定ページで作る必要がないように思います。
new_listである必要がありますか??

  • カテゴリー13のとき、1ページ20件表示を追加。
  • カテゴリー13のとき、カードタイプ、スニペット表示を変更。

単なるカテゴリー一覧なので、ページネーションも表示されます。

必要に応じ、[投稿]→[カテゴリー]→カテゴリーの本文で、説明文などを作成すればよく。
カテゴリーの本文入力はクラシックエディターですが、patternショートコードを使えば、Gutenbergエディターで作成した複雑なレイアウトを利用できます。


以下のコードで十分では?

define('MY_CATEGORY_ID', 13);

// カテゴリー一覧のページ設定
add_action('pre_get_posts', function ($query) {
  // メインクエリかつ管理画面ではない場合のみ処理
  if (!is_admin() && $query->is_main_query()) {
    // カテゴリー一覧が、カテゴリーID=13のの場合
    if (is_category(MY_CATEGORY_ID)) {
      $query->set('orderby', 'title');    // タイトル順
      $query->set('order', 'ASC');        // 昇順(A→Z)
      $query->set('posts_per_page', 20);  // 1ページ20件表示
    }
  }
});


// カードタイプを変更
add_filter('theme_mod_entry_card_type', function($mods) {
  if (is_category(MY_CATEGORY_ID)) {
    // entry_card       :デフォルト
    // big_card_first   :大きなカード(先頭のみ)
    // big_card         :大きなカード
    // vertical_card_2  :縦型カード2列
    // vertical_card_3  :縦型カード3列

    $mods = 'big_card';
  }
  return $mods;
});



// スニペット表示を変更
add_filter('theme_mod_entry_card_snippet_visible', function($mods) {
  if (is_category(MY_CATEGORY_ID)) {
    $mods = '1';
  }
  return $mods;
});
この投稿は22時間前 4回ずつ大門未知子に変更されました

   
わいひら reacted
返信引用
共有:

問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。

また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。

「いいね!」機能はフォーラム登録者のみが利用できる機能です。

CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。

フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。

最近の書き込みはこちら。

詳細なカスタマイズ依頼をするならこちら。

タイトルとURLをコピーしました