今手元に何も無いのでココをこうする・・・。と具体的なことは言えませんが
記事の情報は確かに
FROM $wpdb->posts
で取得できますがカテゴリはまた、別の場所に入っているので
LEFT JOINなどでくっつけながらやっていく必要があります。
別海として
require(‘○○/wp-blog-header.php’);
のようにすると自分でSQLクエリを組み立てなくても
より楽なwordpressの各関数がそのまま使用できるようになるので
get_postsなりで作っていったほうが楽かなとは思います。
こういうやり方もありますよ。
jQuery.autopagerをWordPressで利用して、ajaxで追加記事を読み込み、その後別のjsを動かす使い方
http://nskw-style.com/2012/jquery/jquery-autopager-on-wp.html
jQuery.autopagerを使えるようにある程度コードは書かないと行けないですが、
SQL文はおろか、get_posts(あるいはquery_post)を使わなくても大丈夫なようです
gatespaceさん補足ありがとうございます。
こちらのほうが楽そうですね。
tohakuさん。
一点上記コードで
$now_post_num = $_POST['now_post_num'];
$get_post_num = $_POST['get_post_num'];
の部分ですがもしそのまま使うのであれば
最低限intvalでくくってやったほうがいいかと思います。
jdbbさん
gatespaceさん
アドバイス本当にありがとうございます。
知識不足でjdbbさんの教えてくださった情報が私では理解できないので、
まずはgatespaceさんの教えてくださったページを拝見して試してみたいと思います。
おそらくさらに疑問な点など出てくると思うので、またこちらで質問させていただきます。
ありがとうございました。
jdbbさん
gatespaceさん
間が空いてしまいましたが、ようやく「jQuery.autopagerをWordPressで利用して、ajaxで追加記事を読み込み、その後別のjsを動かす使い方」を参考に、追加の記事を読み込んで表示させることができるようになりました。
しかし、ここから特定のカテゴリを除外する方法がわかりません。
メインインデックスのテンプレート (index.php)のループに
<?php query_posts(‘cat=-1’); ?>
を加えてみたのですが、これだと最初の表示画面はカテゴリ1を除外した結果になるのですが、読み込みボタンを押すと最初と同じ記事が二重に読み込まれてしまいます。
解決の方法について、アドバイスいただけないでしょうか?
また、表示可能な記事がすべて表示されたら、読み込みボタンは非表示(またはすべて読み込み済みとわかるように変更)したいのです。
こちらも解決策ありましたら、ぜひ教えていただけないでしょうか?
よろしくお願いします。
取り急ぎ簡単な方から
表示可能な記事がすべて表示されたら、読み込みボタンは非表示(またはすべて読み込み済みとわかるように変更)したいのです。
現在が何ページ目かはグローバル変数の $paged
に
総ページ数もグローバル変数の $wp_query
に max_num_pages
で入っています。
if ( $paged < $wp_query->max_num_pages ) {
// 最終ページ以外
}
で条件分岐可能です。
上の投稿の条件分岐は通常なら大丈夫ですが、
jQuery.autopager でループしている外側では $paged の値が更新されないので、
使えませんでした。
検証してみたのですが、jQuery.autopager のイベントで
current.page というオブジェクトに現在のページ番号が入るので、
これと $wp_query->max_num_pages の値を比較して、
最終ページであれば読み込みボタンは非表示にできました。
前提条件として、
functions.phpで読み込んでいた general.js(jQuery.autopager の設定部分)は
index.php内に直接記述しますので、
読み込まない(削除)しておいてください。
必要な部分だけですが
<?php
query_posts($query_string.'&cat=-1'); // クエリの改変
if ( have_posts() ) :
?>
<div class="entryList"><!-- autopagerで読み込むコンテンツ -->
<?php while ( have_posts() ) : the_post(); // ループスタート ?>
各投稿
<?php endwhile; ?>
<script type="text/javascript">
/* <![CDATA[ */
jQuery(function() {
$.autopager({
autoLoad: false,
content: '.entryList',
link: '.ajaxLoad a',
load: function(current, next) {
if( current.page >= <?php echo $wp_query->max_num_pages; ?> ){ $('.ajaxLoad').hide(); }
}
});
$('.ajaxLoad a').click(function() {
$.autopager('load');
return false;
});
});
/* ]]> */
</script>
</div><!-- // .entryList -->
<div class="ajaxLoad">
<?php next_posts_link('続きを見る'); ?>
</div>
<?php else : ?>
投稿がありません
<?php endif; ?>
<?php wp_reset_query(); ?>
ありがとうございます!週末にチャレンジしてみます。
カテゴリ除外のほうも、自分なりにがんばってみるつもりですが、何分実力不足なのでお時間あるときにアドバイスいただけると嬉しいです。
よろしくお願いします。
gatespace様
おかげさまで、特定のカテゴリを除外することと、すべての読み込みが完了したらボタンを非表示にすることが実現できました。
本当にありがとうございます。
ですが、まだ問題があって、困っています。
最初にアクセスしたときは10件の記事を表示→もっと読むボタンでさらに10件づつ追加にしたいのですが、現在の状況ですと2つの問題があります。
最初の表示された状態で10件表示は、表示各種設定の1ページに表示する最大投稿数で指定すれば問題なくできるのですが、もっと読むボタンを押すと残っているすべてが1度に読み込まれてしまいます。23件ある記事のうち、最初は10件、もっと読むボタンを押すと13件が読み込まれてしまうのです。
これはjQuery.autopagerのオプションで指定できるのかと見てみたのですが、わからず。。。
もうひとつは、最初に10件表示された状態でボタンを押しても反応せず、何度かクリックすると読み込むという現象が起きています。
※chrome,Fx,IE9で確認しました。
わからないなりに検索して調べてみても、私の実力では雲をつかむようで途方にくれています。
何から何まで頼りっぱなしで本当に心苦しいのですが、お心当たりがありましたらアドバイスをお願いいたします。。。
私の方で
WordPress:3.4.2
テーマ:Twenty Eleven(の子テーマ)
プラグイン:WP Multibyte Patch のみ
で管理画面で設定した件数で読み込んでいくことを確認しています。
管理画面以外で表示件数を変えるような処理をしていませんか?
(WP Query、query_posts、get_postsなどのテンプレートタグやプラグインなど)
いったん、すべてのプラグインを外し、テーマもjQuery.autopager部分だけを入れたものにして確認してみてください