特定の製品ラインのすべての製品をリストするためのページテンプレートを作成しました。ここで、各ページのショートコードに記載されている分類法に基づいて、このカスタム投稿タイプ(商品)からすべての投稿を一覧表示します。
例:
「全プライム商品一覧」ページ
[products line = "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' );
まず最初に、一般的なfunctions.php
ファイルではなくinit
の間にショートコードを登録することが常に良い方法です。少なくともadd_shortcode()
はinit
に含まれるべきです。とにかく、始めましょう!
add_shortcode()
を使うときはいつでも、最初のパラメータはショートコードの名前になり、2番目のパラメータはコールバック関数になります。この意味は:
[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()
は、ショートコードに渡された属性を渡された配列内の属性と照合しようとする方法です。左側がキー、右側がデフォルトです。そのため、代わりにdefaults
をline
に変更する必要があります。デフォルトのカテゴリにする場合は、これが場所になります。
$atts = shortcode_atts( array(
'line' => ''
), $atts );
ユーザーがショートコードline="test"
に属性を追加すると、配列インデックスline
はtest
を保持します。
echo $atts['line']; // Prints 'test'
他のすべての属性は、それらをshortcode_atts()
配列に追加しない限り無視されます。最後にそれはWP_Queryとあなたが必要とするものを印刷するだけです:
/**
* 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();
}
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_category分類法を作成しました。
[商品リストカテゴリ= "シャツ"]
上記のコードは完璧に動作します。