Get Shortcode Attributes

时间:2017-01-04 作者:Kirk

我正在构建一个短代码。我希望通过短代码添加类别名称为“$catslugs”的数组。但是读wordpress上的东西。组织让我困惑。下面的代码是部分代码。这个简单的短代码有效:[camp\\u posts](下面的代码有更多内容)

function camp_posts_function() {//Creates shortcode [camp_posts]

$catslugs = array(\'academic\', \'adventure\', \'arts\', \'religious\', \'special-interest\', \'special-needs\', \'sports\',\'teen\');//Must update as new Main categories are added 
$out = array();
foreach($catslugs as $slug) {
    array_push($out, get_category_by_slug($slug)->term_id);
    }
$CatIDs= implode(\',\', $out);

$camp_posts_bynumber = new WP_Query(array (\'cat\' => $CatIDs));

if( $camp_posts_bynumber->have_posts() ):
我想要一个带有“学术,冒险…”的数组从短代码中拉入。我在我的快捷码中添加了“type”,它只是使用上述代码编写的[camp\\u posts],现在是[camp\\u posts type=“academic,sports”]。我只是不知道如何获取信息。我知道应该是这样的:

function camp_posts_function($atts) {//Creates shortcode [camp_posts]
extract(shortcode_atts(array(
      \'type\' => 1,
   ), $atts));
$out = array();
foreach($atts as $slug) {
    array_push($out, get_category_by_slug($slug)->term_id);
    }
$CatIDs= implode(\',\', $out);
$camp_posts_bynumber = new WP_Query(array (\'cat\' => $CatIDs));

if( $camp_posts_bynumber->have_posts() ):
再摆弄几下,我就更接近了:

function camp_posts_function($atts) {//Creates shortcode [camp_posts]
$atts=shortcode_atts(
        array(
            \'type\' => \'nothing\',
        ), $atts, \'camp_posts\');
 return $atts[\'type\'];
返回“学术、体育”。但我不知道如何把它变成美元的猫鼻涕虫。

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

我想出来了。将快捷码设置为[camp\\u posts type=“academic,sports”]后,实现此技巧的代码如下:

function camp_posts_function($atts) {//Creates shortcode [camp_posts type="academics, sports"]
$atts=shortcode_atts(
        array(
            \'type\' => \'nothing\',
        ), $atts, \'camp_posts\');
$ShortcodeAtts=esc_attr($atts[\'type\']);//Puts "type" attribute into a variable
$ShortcodeAttsArray = explode(\',\', $ShortcodeAtts);

$IDout = array();//Initializes array
foreach($ShortcodeAttsArray as $slug) {
    array_push($IDout, get_category_by_slug($slug)->term_id);//Gets category ID of each category slug name
    }
$CatIDs= implode(\',\', $IDout);//Puts all category IDs into variable $CatIDs with a commas between

$camp_posts_bynumber = new WP_Query(array (\'cat\' => $CatIDs));

if( $camp_posts_bynumber->have_posts() ):

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗