首先,在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的属性与传递的数组中的属性相匹配,左侧为键,右侧为默认值。所以我们需要改变
defaults
到
line
相反,如果我们想默认为一个类别,这将是一个位置:
$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();
}