it-swarm-eu.dev

Vytvořte krátký kód pro zobrazení vlastních typů příspěvků se specifickou taxonomií

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' );
6
Luan Davi

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();
}
7
Howdy_McGee
    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í!

0
Pradeep