web-dev-qa-db-ja.com

WP_Queryクラスが見つかりません

考え方は簡単です。 get_categories()で生成されたドロップダウンメニューがあります。これは、順序付けされていないリストのカテゴリのリストを出力します。それぞれのリストはそれ自身のli要素にあります。
ユーザーがクリックしたときにこれらのli要素のテキスト値を取得しています。それに基づいて、そのカテゴリからの投稿のみを返すカスタムwp_queryを作成します。これを行うには、リスト要素のテキスト値をJS変数にロードし、それをphpファイルに送信して処理します。そのphpファイルは次のように文字列を構成します。

$ff_query = new WP_Query('posts_per_page=2&category_name='.$_POST['JSvariable']); 

…そして理想的にはそれを実行し、DBから情報を返します。私が得るエラーは:

致命的な誤り:クラス 'WP_Query'がに見つかりません C:\ xampp\htdocs\suply\wp-content\themes\suply\includes\proc_cat.php オンラインで 3

これは私の2つのファイルがどのように見えるかです:

1)ajaxリクエストを送信するファイル

<script>
    $(document).ready(function(e) {
        $("#ddmenu li").on('click', function() {
            var cValue = $(this).text();
            $.post("<?php bloginfo('template_url');?>/includes/proc_cat.php", {name: cValue}, function(cat){                
                alert(cat);
                $(".browse-big-slider").append(cat);
            });//end of post
        });//end of click
    });//end of ready
</script>

2)ファイルを処理する必要があります

if(isset($_POST)){
        $name = 'posts_per_page=2&category_name='.$_POST['name'];
        $ff_query = new WP_Query('posts_per_page=2&category_name='.$_POST['name']);
      something else, but it won`t reach this part.
}

これを機能させるために私は何ができますか?それとも別の方法として、どのようにして必要な種類の機能を作成できますか。 (基本的に、ユーザーの選択に基づいて動的に生成された別の照会)。

1
Radu Andrei

それは、テーマテンプレートを直接呼び出すときには、テンプレートファイルに含まれているか定義されているものだけがあり、WordPress環境全体ではないからです。

Wp-headerやloadなどのインクルードを追加することでこれを修正しようとする人もいますが、これは信じられないほど有害です

AJAXリクエストを実行するときは、neverテーマ内のファイルを呼び出し、代わりにWP AJAX AP​​Iを呼び出します。

WP AJAX AP​​Iを使用すると、ファイルはfunctions.php内の単純な関数になります。

この記事のアドバイスに従うことを強くお勧めします。

http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/#js-global

例えばPHP:

wp_localize_script( 'my-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) )
add_action( 'wp_ajax_nopriv_myajax-submit', 'myajax_submit' );
add_action( 'wp_ajax_myajax-submit', 'myajax_submit' );

function myajax_submit() {
    // get the submitted parameters
    $postID = $_POST['postID'];

    // generate the response
    $response = json_encode( array( 'success' => true ) );

    // response output
    header( "Content-Type: application/json" );
    echo $response;

    // IMPORTANT: don't forget to "exit"
    exit;
}

JS:

jQuery.post(
    // see tip #1 for how we declare global javascript variables
    MyAjax.ajaxurl,
    {
        // here we declare the parameters to send along with the request
        // this means the following action hooks will be fired:
        // wp_ajax_nopriv_myajax-submit and wp_ajax_myajax-submit
        action : 'myajax-submit',

        // other parameters can be added along with "action"
        postID : MyAjax.postID
    },
    function( response ) {
        alert( response );
    }
);
1
Tom J Nowell