Vytvořil jsem šablonu stránky, která obsahuje seznam všech produktů konkrétní produktové řady. Nyní chci uvést všechny příspěvky z tohoto typu vlastního příspěvku (produktů) na základě taxonomie popsané v krátkém kódu pro každou stránku.
Příklad:
Stránka "Seznam všech produktů Prime"
[produkty line = "prime"]
Vyzkoušela jsem tento kód:
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' );
Nejprve je dobré registrovat krátký kód během init
versus právě ve vašem obecném souboru functions.php
. Nejméně add_shortcode()
by mělo být v init
. Začněme!
Kdykoliv použijete add_shortcode()
první parametr bude název krátkého kódu a druhý bude funkce zpětného volání. Tohle znamená tamto:
[products line="prime"]
Mělo by to být místo:
[produtos line="prime"]
Dosud máme toto:
/**
* 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
}
Podívejme se na atributy zpracování. Způsob shortcode_atts()
works je v tom, že se bude snažit odpovídat atributům předaným na shortcode s atributy v předaném poli, levá strana je klíč a pravá strana je výchozí. Takže musíme místo defaults
změnit na line
místo - pokud bychom chtěli výchozí kategorii, tak by to bylo místo:
$atts = shortcode_atts( array(
'line' => ''
), $atts );
Pokud uživatel přidá atribut krátký kód line="test"
, pak náš index pole line
bude obsahovat test
:
echo $atts['line']; // Prints 'test'
Všechny ostatní atributy budou ignorovány, pokud je nepřidáme do pole shortcode_atts()
. Nakonec je to jen WP_Query a tisk toho, co potřebujete:
/**
* 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';
}
}
Ve výše uvedeném kódu jsem vytvořil produktovou CPT a taxonomii produktové kategorie pro produkt CPT.
[product-list category = "košile"]
Výše uvedený kód je dokonale funkční!