タグ: カテゴリ

  • WordPress Plugin Archive Posts Sort Customize Version UP 1.3.1

    フロントエンド(サイト)のカテゴリの投稿一覧等のアーカイブ一覧のカスタマイズをする

    Archive Posts Sort Customize

    のバージョンアップをおこないました。

    最新バージョンは1.3.1。

     

    やったこと

    プラグインユーザーの方から「カテゴリ一覧のカスタマイズは出来るけど、カテゴリごとのソートのカスタマイズは出来ないの?」という要望をいただいていたので、今回はそのカテゴリごとのソートのカスタマイズが出来るようにしました。

    いやー、結構難しかったです。。

    難しい原因は「カテゴリごとの設定」ではなく、

    「これから作成されるカテゴリのソート設定」と、「カテゴリ別のソート設定」をどういう風な構成にすると、分かりやすい設定画面になるだろうかという事でした。 😳

     

    カテゴリ別のソート設定だけができるようにする事自体は多分簡単です。

    しかし、これから新たに作成するカテゴリに対しては、ただカテゴリ別のソート設定しか無ければ、カテゴリを作成する度にソートの設定をする必要があり、ちょっと不便ではないかと思いました。 😕

    この問題をどうやって解決しようか。。

    カテゴリごとに設定できる項目と、これから作成されるカテゴリのソート設定ができる項目を作れば、おそらく問題は解決されると思いますが、その設定画面をどうやったら分かりやすく、使いやすくなるだろう。。。 😕

     

    うーん。

    むーん。

    (○’ω’○)ん?

     

     

    結果、このような画面構成になりました。

    Settings screen
    Settings screen

     

    ちょっと画面が大き過ぎて見づらいですが、

    上部は、今まで通りの設定と同じ機能で「デフォルトのカテゴリソート設定」として、全カテゴリ一覧のソート設定をする項目となります。

    下部は、「そのカテゴリだけ別のソート設定」として、

    指定するカテゴリだけを別のソート設定にできるようにしました。

     

    多分、これならみんな使いやすい、よね? 😮

     

    ちなみに、カテゴリを作成しても、そのカテゴリの投稿が1つもない場合は設定できない(設定するカテゴリが表示されません)ので注意してください。

     

    ダウンロードされるかたはこちらからどうぞ。

    http://wordpress.org/plugins/archive-posts-sort-customize/

  • 管理画面サイドメニューにカテゴリ内記事一覧のメニューを

    カテゴリを作成して、記事にカテゴリ属性を付けることはよくありますね。

    で、その作成したカテゴリ内の記事一覧を、管理画面から見る方法としては、

    「投稿一覧」 から 指定のカテゴリを選択して絞込み検索をする事でできます。

    投稿一覧カテゴリ選択部分
    投稿一覧カテゴリ選択部分

    訳あって、そういう機能を使いたくない。いちいち絞込み検索するまでの流れが面倒。

    という方もいると思います。最初からサイドメニューに作成したカテゴリの記事一覧メニューが表示されて、クリックするだけでその記事一覧が表示されるように。

    今回は、それをやりたいと思います。

     

    ゴールとするメニューの例

    「投稿」メニューと、「メディア」の間にカテゴリ一覧が表示されるようにしていきます。

    ゴール
    ゴールとするメニュー例

     

    まずはカテゴリ一覧を取得。

    の前に。まずはフックさせます。

    管理画面のメニューに追加する事は決まっているので、ご自身のテーマのfunctions.phpにて、admin_menuにアクションを追加します。

    add_action( 'admin_menu' , 'my_admin_menu' );

    今回は適当に、my_admin_menuという関数を用意する前提です。で、関数を用意。

    function my_admin_menu() {
    
    }

    この関数内でカテゴリ一覧を取得したりメニューを追加したりしていきます。

     

    じゃあまずは、カテゴリ一覧を取得

    $args = array( 'hide_empty' => 0 );
    $categories = get_categories( $args );
    print_r($categories);

    で、カテゴリ一覧が出力されます。表示が変にはなりますが、今はカテゴリを取得する事が目的なので、それは無視してください。

    get_categories 出力結果
    get_categories 出力結果

    このカテゴリが表示されている順番の通りに、メニューが作成されることになりますので、順番を変更したい方は今のうちに順番を変更してください。

    get_categories()については関数リファレンス/get categoriesを見てパラメータを設定すれば順番を変更できます。

    ここまでで、カテゴリ一覧が取得できたらprint_rは消して下さいね。

     

    管理画面サイドメニューへの追加

    メニューへの追加方法は、add_menu_pageで追加する方法とglobal $menuを使って追加する方法の2種類は知っています。

    どの方法でやろうかと考えましたが、今回は「カテゴリ一覧メニューの上下に、セパレーター(区切り線)も設置」するので、グローバル変数の$menuを使って追加していきます。

    まずはこれを。

    global $menu;
    global $submenu;
    
    print_r($menu);

    どうですか?とりあえず上手く出力できましたか?

    $menu 出力
    $menu 出力

    次に、この出力を「HTMLソース」から確認してください。

    htmlソース
    htmlソース

    今回は「投稿一覧」と「メディア」の間に追加する予定です。配列のキーを見ると、投稿は5、メディアは10となっているのが分かると思います。このキーの小さい順に、wordpressの管理画面のサイドメニューは表示されているので、今回は7ぐらいのところにカテゴリ一覧のメニューを表示させたいと思います。

    $slug = 'edit.php?cat=' . $categories[0]->cat_ID;
    $menu[7] = array( $categories[0]->cat_name , 'edit_posts', $slug , '' , 'menu-top menu-icon-post', 'menu-posts-cat' );

    カテゴリ一覧で取得した最初のカテゴリを親メニューとしました。

    親メニュー設定
    親メニュー設定

    確かに、記事一覧は指定のカテゴリの記事のみが表示されました。しかし、このままではメニューが「投稿」「投稿一覧」のままです。現在のページが、

    edit.php?cat=*

    ではなく、

    edit.php

    として認識されているようです。

    なので、この部分を変更する為に、グローバル変数 $parent_file を変更します。

    変更する為には現在のフックポイントとは別にフックしなければいけないので注意。

    function edit_parent_file() {
     global $parent_file;
     global $current_screen;
    
     if( $current_screen->base == 'edit' && isset( $_REQUEST["cat"] ) ) {
     $args = array( 'hide_empty' => 0 );
     $categories = get_categories( $args );
     $parent_file = 'edit.php?cat=' . $categories[0]->cat_ID;
     }
    }
    add_action( 'admin_head', 'edit_parent_file');

    これで、現在のメニューの設定が効くようになります。

    現在のメニュー
    現在のメニュー

    この調子で、サブメニューも作成していきます。

    先ほどのmy_admin_menu関数内にサブメニュー用に以下を追加。

    foreach( $categories as $key => $cat ) {
     $slug_s = 'edit.php?cat=' . $cat->cat_ID;
     $position = $key + 1;
     $submenu[$slug][$position] = array( $cat->cat_name , 'edit_posts', $slug_s , '' , 'menu-top menu-icon-post', 'menu-posts-cat' );
     }

    これで、サブメニューができました。

    サブカテゴリー
    サブカテゴリー

    が、またしてもサブメニューを選択しても、サブメニューが選択状態にならない。。

    どうやら、グローバル変数 $submenu_file も少し変更しないといけないようですね。

    先ほどのedit_parent_fileを少し変更して、

    function edit_parent_file() {
     global $parent_file;
     global $submenu_file;
     global $current_screen;
    
     if( $current_screen->base == 'edit' && isset( $_REQUEST["cat"] ) ) {
     $args = array( 'hide_empty' => 0 );
     $categories = get_categories( $args );
     $parent_file = 'edit.php?cat=' . $categories[0]->cat_ID;
     $submenu_file = 'edit.php?cat=' . intval( $_REQUEST["cat"] );
     }
    }
    add_action( 'admin_head', 'edit_parent_file');

    $submenu_file にあたる部分を追加しました。

    これで、完成ですね。

    サイドメニュー
    サイドメニュー

     

    すっかり忘れていました。区切り線を作成したメニューの上下に入れるのを。

    $separator = array( '' , 'read' , 'separator' , '' , 'wp-menu-separator' );
    $menu[6] = $separator;
    $menu[8] = $separator;
    ksort($menu);

    ※ちなみに、ksortを実行しないと、なぜか上下に区切り線が出ませんでした。

     

     

    何度かコードを追加したりして分からなくなってきた方もいるかもしれませんので、コードを下記に記載します。

     

    functions.php

    function my_admin_menu() {
    
     $args = array( 'hide_empty' => 0 );
     $categories = get_categories( $args );
    
     global $menu;
     global $submenu;
    
     $slug = 'edit.php?cat=' . $categories[0]->cat_ID;
     $menu[7] = array( $categories[0]->cat_name , 'edit_posts', $slug , '' , 'menu-top menu-icon-post', 'menu-posts-cat' );
    
     foreach( $categories as $key => $cat ) {
      $slug_s = 'edit.php?cat=' . $cat->cat_ID;
      $position = $key + 1;
      $submenu[$slug][$position] = array( $cat->cat_name , 'edit_posts', $slug_s , '' , 'menu-top menu-icon-post', 'menu-posts-cat' );
     }
     $separator = array( '' , 'read' , 'separator' , '' , 'wp-menu-separator' );
     $menu[6] = $separator;
     $menu[8] = $separator;
     ksort($menu);
    }
    add_action( 'admin_menu' , 'my_admin_menu' );
    
    function edit_parent_file() {
     global $parent_file;
     global $submenu_file;
     global $current_screen;
    
     if( $current_screen->base == 'edit' && isset( $_REQUEST["cat"] ) ) {
      $args = array( 'hide_empty' => 0 );
      $categories = get_categories( $args );
      $parent_file = 'edit.php?cat=' . $categories[0]->cat_ID;
      $submenu_file = 'edit.php?cat=' . intval( $_REQUEST["cat"] );
     }
    }
    add_action( 'admin_head', 'edit_parent_file');
  • wordpress plugin Archive Posts Sort Customize release.

    カテゴリページでの記事位置、タグページでの記事一覧は通常、

    • 日付順
    • 降順
    • 投稿記事数は管理画面にて設定した、設定記事数

    に応じた内容が表示されます。

    このデフォルトの記事の表示順序を自由に変更できるプラグインを作りました。

    ×query_posts() ○pre_get_posts() 仕様。
    管理画面の記事一覧には適用されません。

     

    インストール方法

    プラグインインストール画面の検索に、「Archive Posts Sort Customize」と記入して検索してインストールしてください。

    プラグインインストール画面
    プラグインインストール画面
    プラグイン検索結果
    プラグイン検索結果

    まだ誰からも評価をいただいていないので、★がありません。。星が無いって、なかなか怪しくて使う気になれない気がするのは、私だけかな。。

     

    インストールしたら

    管理画面メニュー
    管理画面メニュー

    管理画面の設定の下のところに、「カテゴリー記事一覧ソートカスタマイズ」というメニューが出るので、そこから記事一覧のソート順を設定していきます。

    archive_posts_sort_customize画面
    archive_posts_sort_customize画面

    これが設定画面になります。設定する項目は基本は3つ。
    「投稿の表示数」、「投稿のソートする対象」、「ソートの順序」です。

    降順や昇順について、自分でもたまに忘れたりする事があります。

    新しい記事から古い記事へのソート、どっちだっけ??

    そういう細かい表記があると、特に初心者には使いやすいと思い表記しています。

     

    カスタムフィールド名でのソートについて

    ソート対象の設定
    ソート対象の設定

    カスタムフィールドの値をもとに、記事一覧をソートすることもできます。
    背景がうっすらとなっている部分がありますが、ソートの対象からカスタムフィールドを選ぶと、ソート対象にしたいカスタムフィールド名を入力することができるようになっています。

    特に。カスタムフィールド名が分からない方もいるとおもったので、
    「カスタムフィールド名が分からない場合はこちらを~」のリンクを付けて、そのリンクをクリックすると、
    記事で使用している全カスタムフィールドのキーの一覧が下に表示される仕様にしています。

    screenshot-3
    screenshot-3

    「custom_field1」、「custom_field2」の2つが、実際に記事編集画面から作成したカスタムフィールドになります。

    このカスタムフィールド名をクリックすると、上のカスタムフィールド名を入力する所に自動で挿入される、ちょっとだけあると嬉しい仕様?にしています。

    ちなみに今のところは、カテゴリページの記事一覧、タグページの記事一覧の2種類のみにしています。
    ※バグがあれば、修正をおこなってから年月ベースのアーカイブも追加する予定です。

     

    ダウンロードされるかたはこちらからどうぞ。

    http://wordpress.org/extend/plugins/archive-posts-sort-customize/