0

テーマの function.php ファイルに以下の関数を作成し、それを taxonomy.php ファイルから呼び出そうとしています。

query_brands_geo('dealers', 'publish', '1', $taxtype, $geo, $brands);

すべての変数は taxonomy.php で設定されます。

以下のクエリは、taxonomy.php ファイルに直接配置すると完璧に機能します。これを関数として機能させるには何が欠けていますか?

関数として、引数が2〜6回繰り返されると、次のエラーステートメントが表示されます。

警告: query_brands_geo() の引数 2 がありません

function query_brands_geo($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
    /* Custom Query for a brand/geo combination to display dealers with a certain brand and geography */
    //Query only for brands/geography combo and paid dealers

    $wp_query = new WP_Query();

     $args = array(
       'post_type' => '$posttype',
       'post_status' => array($poststatus),
       'orderby' => 'rand', 
       'posts_per_page' => 30,
       'meta_query' => array(
           array(
               'key' => 'wpcf-paid',
               'value' => array($paidvalue),
               'compare' => 'IN',
           )
       ),
        'tax_query' => array(
            'relation' => 'AND',
                array(
                    'taxonomy' => $taxtype,
                    'field' => 'slug',
                    'terms' => $geo
                ),
                array(
                    'taxonomy' => 'brands',
                    'field' => 'slug',
                    'terms' => $brands
                )

            )

        );
    $wp_query->query($args);

}
add_action( 'after_setup_theme', 'query_brands_geo' );
4

4 に答える 4

0

OK私はテストしました、そしてそれはこのように働きます:あなたの関数コードをこのように修正してください:

function query_brands_geo($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
/* Custom Query for a brand/geo combination to display dealers with a certain brand and geography */
//Query only for brands/geography combo and paid dealers

 $args = array(
   'post_type' => '$posttype',
   'post_status' => array($poststatus),
   'orderby' => 'rand', 
   'posts_per_page' => 30,
   'meta_query' => array(
       array(
           'key' => 'wpcf-paid',
           'value' => array($paidvalue),
           'compare' => 'IN',
       )
   ),
    'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => $taxtype,
                'field' => 'slug',
                'terms' => $geo
            ),
            array(
                'taxonomy' => 'brands',
                'field' => 'slug',
                'terms' => $brands
            )

        )

    );
query_posts($args);

}

次に、taxonomy.phpで、次のようにします。

query_brands_geo('post', 'published', ..., ..., ...);
while ( have_posts() ) : the_post(); 

the_content(); // Etc.

endwhile; // end of the loop.
于 2012-12-17T08:03:11.600 に答える
0

私はWPサイトでこれをテストしたところ、それは機能するので、同じロジックを尊重するならあなたにも必要です:

            function query_brands_geo($posttype, $poststatus) {
              $args = array(
               'post_type' => $posttype,
               'post_status' => array($poststatus) 
                );
                $result = new WP_Query($args);
                wp_reset_query();
                return $result;
            }

            $result = query_brands_geo('post', 'published');
            while ( $result->have_posts() ) : $result->the_post(); 
                the_content();
            endwhile; // end of the loop. 
于 2012-12-18T19:51:51.247 に答える
0

functions.php に配置したこの関数を使用して、taxonomy.php ファイルで実行したいとします。正しいですが、投稿したコードは、アクションとして実行していることを示しています (関数コードの後に​​ : が続きますadd_action(...)。そこで行ったことは、関数をafter_setup_themeフックにフックしたことです。そのため、関数は taxonomy.php に配置された (おそらく) 呼び出しによって実行されません。実際にdo_action('after_setup_theme'...)は、WordPress によって実行されると、テーマのセットアップ後に WP によって自動的に実行されます! このコンテキストでは、引数が 1 つしか渡されないため、次のエラー メッセージが表示さ れます。引数 2 がありませんadd_action(...)。それはうまくいくはずです。

于 2012-12-14T23:18:13.767 に答える
0

関数から何かを返す必要があるため、関数コードの最後でこれを変更します。

$wp_query->query($args);

これとともに :

$result = $wp_query->query($args);
wp_reset_query();
return $result;

そして、次のように呼び出されたときに、関数の結果オブジェクトであることを知って、taxonomy.php で適切に呼び出します。

$myquery = query_brands_geo($arg1, $arg2, ...); // Etc.

クエリ結果オブジェクトになるため、それをループする必要があります (他の場所でループを含む WordPress コードを参照してください)。

于 2012-12-15T11:02:33.863 に答える