0

wordpressの単一投稿URLの動作を変更して、single.phpファイルを使用してページをロードする代わりに、ajaxを介して投稿コンテンツをindex.phpページにロードできるようにする方法を見つけようとしています。このサイトは wordpress サイトですが、ajax を使用してすべてのコンテンツを 1 つのページに読み込みます。基本的に、読み取られる実際の php ファイルは決して変更されず、代わりに、ユーザーが新しいページをクリックするたびに、ページのコンテンツが ajax 要求で読み込まれます。

おそらく.htaccessファイルを編集して、誰かがwww.mysite.com/blog/post-nameにアクセスしたときにindex.phpをロードし、スクリプトに要求された投稿コンテンツをインデックスにロードするように指示する方法はありますか. ajax経由のphpページ?

ありがとう!

4

1 に答える 1

1

すでに index.php ファイルで AJAX を使用している場合は、次のようになります。サーバーで、single.php ファイルを削除し、index.php ファイルへのシンボリック リンクを作成できます。

*nix (os x を含む) の場合:

ln -s index.php single.php

または、single.php ファイル内で、すべてを削除して index.php を含めることができます。

<?php include('index.php'); ?>

これが AJAX 経由でロードされるかどうかの制御は、クライアントで行う必要があります。

それとも、まだ AJAX がまったく機能していませんか? そうでない場合、答えはもう少し複雑になります。WordPress サイトで AJAX をセットアップする方法は次のとおりです。

サーバーでは、JSON API wordpress プラグインを使用して、AJAX 経由で (JSON 形式で) コンテンツを簡単に提供できるようにしています。

クライアントでは、jQuery を使用して wordpress へのリンクをキャプチャし、代わりに AJAX を介して実行できます。別のドメインのサーバーから最近の投稿のリストを取得するコードをここにコピーしています (したがって、単純な JSON ではなく JSONP を使用しています)。これを変更して単一の投稿を取得する方法については、JSON API ドキュメントを参照してください。

jQuery(function($) {
    $('a').click(function(event) {
        $('body').css('cursor', 'wait');
        event.preventDefault();  // this prevents the regular behavior of clicking a link


        $.ajax({
        type:'GET',
        url:url,
        async:false,
        jsonpCallback:'jsonCallback',
        contentType:"application/json",
        data: {
            json: 'get_recent_posts',
                count: 10,
                page: page + 1
            },
            dataType:'jsonp'
        }).always(function(){
            jQuery('body').css('cursor', 'auto');
        }).done(function(json) {
            $.each(json.posts, function(index, value) {
            tags = [];
            $.each(value.tags, function(index, value) {
                tags.push('<a href="' + tag_url + value.slug + '">' + value.title + '</a>');
            });
            html =
                '<div>' +
                    '<header class="entry-header">' +
                        value.title +
                        '<br>' +
                        value.date +
                    '</header>' +
                    '<div class="entry-content">' +
                        value.content +
                    '</div>' +
                '</div>' +
                '<span class="labels_label">'+
                    'Labels: ' +
                '</span>' +
                '<span class="labels">' +
                    tags.join(', ') +
                '</span>' +
                '<hr>';
            $('.full-width .content').append(html);
        });
    });
});
于 2012-10-20T21:16:25.557 に答える