質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.86%

  • PHP

    18598questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    6400questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • プラグイン

    386questions

    プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

WordpressプラグインPost List Generatorにてカテゴリー別のリストを作りたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 256

hobbit

score 3

wordpressプラグイン「Post List Generator」にてカテゴリーごとの投稿リストを複数作りたいと考えています。
「Post List Generator」には、カテゴリーのスラッグを設定できる機能がありますが、複数のリストを用意した場合、全部のリストに反映する為、つかえません。

そこで、ショートコードを[showpostlist test="aaa"]のようにして、配列を渡すことで、以下のように
条件分岐させ、これは、成功しました。

しかし、「続きをみる」という無限スクロールを推すと、このショートコードの配列が無視されます。
どのようにして引き継いでやればよいのかというところで、躓いています。

ヒントをご存知の方、宜しくお願いします。

        //追加
        extract(shortcode_atts(array(
                'test' => ''
            ), $atts));

        if ($atts == 'aaa'){
            $condition['category_name'] = "aaa"
        }else{
            $condition['category_name'] = "bbb"
        }
post-list-generator.php
<?php
/*
 Plugin Name: Post List Generator
Plugin URI: http://residentbird.main.jp/bizplugin/
Description: 記事(投稿・固定ページの一覧を作成するプラグインです
Version: 1.3.0
Author:WordPress Biz Plugin
Author URI: http://residentbird.main.jp/bizplugin/
*/

include_once( dirname(__FILE__)."/admin-ui.php" );
new PostListGeneratorPlugin();

class PLG{
    const VERSION = "1.3.0";
    const SHORTCODE = "showpostlist";
    const OPTIONS = "post_list_options";

    public static function get_option(){
        return get_option(self::OPTIONS);
    }

    public static function update_option( $options ){
        if ( empty($options)){
            return;
        }
        update_option(self::OPTIONS, $options);
    }

    public static function enqueue_css_js(){
        wp_enqueue_style('post-list-style', plugins_url('post-list-generator.css', __FILE__ ), array(), self::VERSION );
        wp_enqueue_script('post-list-js', plugins_url('next-page.js', __FILE__ ), array('jquery'), self::VERSION );
    }

    public static function localize_js(){
        wp_localize_script( 'post-list-js', 'PLG_Setting', array(
                'ajaxurl' => admin_url('admin-ajax.php'),
                'action' => 'get_post_ajax',
                "plg_dateformat" => "Y年n月j日",
                'next_page' => '1',
        ));
    }
}

/**
 * プラグイン本体
 */
class PostListGeneratorPlugin{

    var $adminUi;

    public function __construct(){
        register_activation_hook(__FILE__, array(&$this,'on_activation'));
        add_action( 'admin_init', array(&$this,'on_admin_init') );
        add_action( 'admin_menu', array(&$this, 'on_admin_menu'));
        add_action( 'wp_enqueue_scripts', array(&$this,'on_enqueue_sctipts') );
        add_action( 'wp_ajax_get_post_ajax', array(&$this,'get_post_ajax') );
        add_action( 'wp_ajax_nopriv_get_post_ajax', array(&$this,'get_post_ajax') );
        add_shortcode( PLG::SHORTCODE, array(&$this,'show_shortcode'));
    }

    function on_activation() {
        $option = PLG::get_option();
        if( $option ) {
            return;
        }
        $arr = array(
                "content_type" => "投稿",
                "orderby" => "公開日順",
                "category_name" => "",
                "numberposts" => "30",
                'window_open' => 'false',
        );
        PLG::update_option( $arr );
    }

    function on_enqueue_sctipts() {
        if ( is_admin() ) {
            return;
        }
        PLG::enqueue_css_js();
        PLG::localize_js();
    }

    function on_admin_init() {
        $this->adminUi = new PLGAdminUi(__FILE__);
    }

    public function on_admin_menu() {
        add_options_page("Post List設定", "Post List設定", 'administrator', __FILE__, array(&$this->adminUi, 'show_admin_page'));
    }

    function show_shortcode($atts){
        extract(shortcode_atts(array(
                'test' => ''
            ), $atts));
        $info = new PostListInfo( '',$test);
        ob_start();
        include( dirname(__FILE__).'/post-list-view.php');
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }

    /**
     * Ajax
     */
    function get_post_ajax(){
        $page = absint( $_REQUEST['page'] );
        if ( $page == 0){
            die();
        }
        $info = new PostListInfo( $page );
        $info->next_page = $info->has_next ? $page + 1: null;
        $json = json_encode( $info );
        $charset = get_bloginfo( 'charset' );
        nocache_headers();
        header( "Content-Type: application/json; charset=$charset" );
        echo $json;
        die();
    }
}


class PostListInfo{
    var $items = array();
    var $has_next = false;
    var $window_open = false;

    public function __construct( $page = 0 , $atts){

        $options = PLG::get_option();
        $this->window_open = isset( $options['window_open'] ) ? $options['window_open'] : false;

        $condition = array();
        if ( $options['content_type'] == '投稿'){
            $condition['post_type'] = 'post';
        }else if ( $options['content_type'] == '固定ページ' ){
            $condition['post_type'] = 'page';
        }else{
            $condition['post_type'] = array('page', 'post');
        }
        if ( $options['orderby'] == '公開日順'){
            $condition['orderby'] = 'post_date';
            $condition['order'] = 'desc';
        }else if ( $options['orderby'] == '更新日順'){
            $condition['orderby'] = 'modified';
            $condition['order'] = 'desc';
        }else{
            $condition['orderby'] = 'title';
            $condition['order'] = 'asc';
        }
        $condition['numberposts'] = $options['numberposts'] + 1;
        $condition['offset'] = $page * $options['numberposts'];
        //$condition['category_name'] = $options['category_name'];

        //追加
        extract(shortcode_atts(array(
                'test' => ''
            ), $atts));

        if ($atts == 'aaa'){
            $condition['category_name'] = "aaa"
        }else{
            $condition['category_name'] = "bbb"
        }

        $posts = get_posts( $condition );

        if ( !is_array($posts) ){
            return;
        }

        if ( count($posts) > $options['numberposts']){
            $this->has_next = true;
            array_pop ( $posts );
        }

        foreach($posts as $post){
            $this->items[] = new PostListItem($post, $options);
        }
    }
}

class PostListItem{
    var $date;
    var $title;
    var $url;

    public function __construct( $post, $options ){
        $raw_date = $options['orderby'] == '公開日順' ? $post->post_date : $post->post_modified;
        $dateformat = empty($options['plg_dateformat']) ? "Y年n月j日" : $options['plg_dateformat'];
        $this->date = date($dateformat, strtotime($raw_date));
        $this->title = esc_html( $post->post_title );
        $this->url = get_permalink($post->ID);
    }
}

?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

プラグインの修正方法ではありませんが、このプラグインを使ってみては?
WordPress Infinite Scroll – Ajax Load More
比較にならないほど高機能です。試してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/13 18:32

    Ajax Load Moreにて、思った通りの動作を確認することができました!
    こちらを使用することにします。ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    「WordPress Popular Posts」から順位の投稿IDを取得したいです

    現在、「WordPress Popular Posts」を使っているのでですが、 1位から5位までの投稿IDのみを配列で取得することは可能でしょうか? 最終的には http://

  • 受付中

    wordpress カスタム投稿 一件ずつ表示

    wordpressのカスタム投稿について質問があります。 カスタム投稿タイプ(複数)の最新投稿を1ページに全て効率良く出力する方法はありますでしょうか? =======

  • 解決済

    ワードプレスプラグイン「Event Organiser」で一覧表示ができません。

    前提・実現したいこと ワードプレスプラグイン「Event Organiser」を利用しています。 現在以下の様なコードで、一覧表示をしているのですが、 開催日順に並びませ

  • 解決済

    JSで 2つのプルダウンを連動させたい

     前提・実現したいこと 二つのプルダウンを連動させるページを作りたいと思っています。 プルダウン1  やさい くだもの プルダウン2  キャベツ レタ

  • 受付中

    複数のドロップダウンリストについて

    前提・実現したいこと PHPとJQUERYで多段階のドロップダウンリストを実装しようとしておりますが、不明点があり、実現できておりません。 発生している問題・エラーメッセー

  • 解決済

    JavaScriptでのComboBox のようなもの

    avaScriptに挑戦しています。 HTMLに ComboBox ( テキストボックス + リストボックス ) に当たるものがないので、 datalistタグというも

  • 解決済

    c# html~情報取得~表示

    私は、プログラミング言語のc#を学び始めた初心者です。 関東でIT関連の仕事をしています。 以前に、少し趣味でJavaを少しかじってましたが、自主的に少しやっていた程度です

  • 解決済

    Fuelphp プルダウンを年月で作成したい

    fuelphp:1.7.0にて プルダウンを作成したいのですが 条件が 開始年月が2017/06 終了範囲が現在の年月(現在なら2017/08) のような自動で毎月プルダウ

同じタグがついた質問を見る

  • PHP

    18598questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    6400questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • プラグイン

    386questions

    プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。