2017-08-20 20 views
0

特定のメタキー(この例では保証フィールド)が1に設定されている特定のタクソノミー(Grimsbyを選択したディーラーシップ税)を持つ投稿の数を数えます。私ができることを望むのは、短いフィールドを使ってメタキーとタクソノミの用語を変更することです。そのため、さまざまなフィールドに関数を再利用することができます。私はコーデックスを調べ、$ attについて読んだが、いくつかのテストでは成功しなかった。すべてのアドバイスをいただければ幸いです。ショートコードの属性を持つダイナミック関数

function counttheposts_func($atts) { 
     $args = array(
      'posts_per_page' => -1, 
      'post_type'   => 'deal', 
      'post_status'  => 'publish', 
      'meta_key'   => 'wpcf-warranty', 
      'meta_value'  => '1', 
      'tax_query' => array(
       'relation' => 'AND', 
       array(
        'taxonomy' => 'dealership-tax', 
        'field' => 'slug', 
        'terms' => array('Grimsby'), 
      ), 
     ) 
     ); 

     $posts_query = new WP_Query($args); 
     $the_count = $posts_query->post_count; 

     echo $the_count; 


    } 

    add_shortcode('counttheposts', 'counttheposts_func'); 

答えて

0

あなたがこの(クエリがテストされていない)のような何かを試みることができる:ショートが[counttheposts terms="term1,term2" meta_key="my-meta-key"]のように呼び出された場合

function counttheposts_func($atts) { 
    /** 
    * Defaults 
    * 
    * @var array 
    */ 
    $args = shortcode_atts(array(
     'posts_per_page' => -1, 
     'post_type'  => 'deal', 
     'post_status' => 'publish', 
     'meta_key'  => 'wpcf-warranty', 
     'meta_value'  => '1', 
     'tax_query'  => array(
      'relation' => 'AND', 
      array(
       'taxonomy' => 'dealership-tax', 
       'field' => 'slug', 
       'terms' => array('grimsby'), // The slug should be something like the result of sanitize_title(). 
      ), 
     ), 
    ), $atts); 

    /** 
    * If the shortcode contains the 'terms' attribute, then we should override 
    * the 'tax_query' since we have to treat this differently. 
    */ 
    if (isset($atts['terms']) && '' !== $atts['terms']) { 
     /** 
     * You can even try multiple term slugs separating them with ",". You'll 
     * probably want to escape each term with sanitize_title() or something to 
     * prevent empty results, since expects a slug, not a title. 
     * 
     * @var array 
     */ 
     $terms = explode(',', $atts['terms']); 

     $args['tax_query'] = array(
      'relation' => 'AND', 
      array(
       'taxonomy' => 'dealership-tax', 
       'field' => 'slug', 
       'terms' => $terms, 
      ), 
     ); 
    } 

    $posts_query = new WP_Query($args); 

    return $posts_query->post_count; 
} 

$args変数の生の結果は次のとおりです。

Array 
(
    [posts_per_page] => -1 
    [post_type] => deal 
    [post_status] => publish 
    [meta_key] => my-meta-key 
    [meta_value] => 1 
    [tax_query] => Array 
    (
     [relation] => AND 
     [0] => Array 
     (
      [taxonomy] => dealership-tax 
      [field] => slug 
      [terms] => Array 
      (
       [0] => term1 
       [1] => term2 
      ) 
     ) 
    ) 
) 
+0

を行う必要があり少しテストをして、今私はこれ以上展開することができますどのようにアイデアを持っていたが、最初はうまくいくようですが、助けてくれてありがとう! –

関連する問題