创建短代码以显示具有特定分类的自定义帖子类型

时间:2016-07-21 作者:Luan

我创建了一个页面模板来列出特定产品线的所有产品。现在,我想根据每个页面的快捷码中描述的分类法列出此自定义帖子类型(产品)中的所有帖子。

示例:

第“所有主要产品列表”页

[产品线=“prime”]

我尝试了以下代码:

function shortcode_mostra_produtos ( $atts ) {
  $atts = shortcode_atts( array(
    \'default\' => \'\'
  ), $atts );
    $terms = get_terms(\'linhas\');
    wp_reset_query();
    $args = array(\'post_type\' => \'produtos\',
      \'tax_query\' => array(
        array(
          \'taxonomy\' => \'linhas\',
          \'field\' => \'slug\',
          \'terms\' => $atts,
        ),
      ),
     );
     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        while($loop->have_posts()) : $loop->the_post();
            echo \' "\'.get_the_title().\'" \';
        endwhile;
     }
}
add_shortcode( \'produtos\',\'shortcode_mostra_produtos\' );

3 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

首先,在init 与一般情况相比functions.php 文件至少add_shortcode() 应该在init. 不管怎样,让我们开始吧!

无论何时使用add_shortcode() 第一个参数是短代码的名称,第二个参数是回调函数。这意味着:

[products line="prime"]
应改为:

[produtos line="prime"]
到目前为止,我们有:

/**
 * Register all shortcodes
 *
 * @return null
 */
function register_shortcodes() {
    add_shortcode( \'produtos\', \'shortcode_mostra_produtos\' );
}
add_action( \'init\', \'register_shortcodes\' );

/**
 * Produtos Shortcode Callback
 * - [produtos]
 * 
 * @param Array $atts
 *
 * @return string
 */
function shortcode_mostra_produtos( $atts ) {
    /** Our outline will go here
}
让我们看看处理属性。这条路shortcode_atts() 其工作原理是,它将尝试将传递给shortcode的属性与传递的数组中的属性相匹配,左侧为键,右侧为默认值。所以我们需要改变defaultsline 相反,如果我们想默认为一个类别,这将是一个位置:

$atts = shortcode_atts( array(
    \'line\' => \'\'
), $atts );
如果用户向快捷码添加属性line="test" 然后我们的数组索引line 将保持test:

echo $atts[\'line\']; // Prints \'test\'
所有其他属性都将被忽略,除非我们将它们添加到shortcode_atts() 大堆最后,只需执行WP\\U查询并打印所需内容:

/**
 * Register all shortcodes
 *
 * @return null
 */
function register_shortcodes() {
    add_shortcode( \'produtos\', \'shortcode_mostra_produtos\' );
}
add_action( \'init\', \'register_shortcodes\' );

/**
 * Produtos Shortcode Callback
 * 
 * @param Array $atts
 *
 * @return string
 */
function shortcode_mostra_produtos( $atts ) {
    global $wp_query,
        $post;

    $atts = shortcode_atts( array(
        \'line\' => \'\'
    ), $atts );

    $loop = new WP_Query( array(
        \'posts_per_page\'    => 200,
        \'post_type\'         => \'produtos\',
        \'orderby\'           => \'menu_order title\',
        \'order\'             => \'ASC\',
        \'tax_query\'         => array( array(
            \'taxonomy\'  => \'linhas\',
            \'field\'     => \'slug\',
            \'terms\'     => array( sanitize_title( $atts[\'line\'] ) )
        ) )
    ) );

    if( ! $loop->have_posts() ) {
        return false;
    }

    while( $loop->have_posts() ) {
        $loop->the_post();
        echo the_title();
    }

    wp_reset_postdata();
}

SO网友:Pradeep

    add_shortcode( \'product-list\',\'bpo_product_list\' );
function bpo_product_list ( $atts ) {
  $atts = shortcode_atts( array(
    \'category\' => \'\'
  ), $atts );
    $terms = get_terms(\'product_category\');
    wp_reset_query();
    $args = array(\'post_type\' => \'product\',
      \'tax_query\' => array(
        array(
          \'taxonomy\' => \'product_category\',
          \'field\' => \'slug\',
          \'terms\' => $atts,
        ),
      ),
     );
     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        while($loop->have_posts()) : $loop->the_post();
            echo \' "\'.get_the_title().\'" \';
        endwhile;
     }

     else {
            echo  \'Sorry, no posts were found\';
          }
}
在上面的代码中,我为产品CPT创建了产品CPT和product\\u类别分类法。

[产品列表类别=“衬衫”]

以上代码非常有效!

SO网友:Vivek Tamrakar

**Try this **

function shortcode_bws_quiz_maker($id)
{
  if($id!=\'\')
  {
    $post_id=$id[0];
    $html=\'\';
    global $wpdb;
   $args=array(\'post_type\'=>\'post_type\',\'p\'=>$post_id);
   $wp_posts=new WP_Query($args);
   $posts=$wp_posts->posts;
  $html.="What you to get write here";
    return $html;

  }
  else
  {
    return \'Please enter correct shortcode\';    
  }

}
add_shortcode(\'bws_quiz_maker\',\'shortcode_bws_quiz_maker\');

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\