尝试将动态内容调用为ShortCode属性

时间:2017-06-04 作者:macmike78

我正在尝试向现有(第三方)短代码添加动态属性。短代码在同一页上出现多次。当我这样做时(在functions.php中),我可以得到第一个正确输出的短代码,但其他的则不行。

function testOne(){
    return do_shortcode(\'[abc type="contact" orderby="menu_order" order="asc" style="list-post" logic="and" abc_tax_student="student1" abc_tax_teacher="\'.basename(get_permalink()).\'"]\');
}
add_shortcode(\'shortcode1\', \'testOne\');

function testTwo(){
    return do_shortcode(\'[abc type="contact" orderby="menu_order" order="asc" style="list-post" logic="and" abc_tax_student="student2" abc_tax_teacher="\'.basename(get_permalink()).\'"]\');
}
add_shortcode(\'shortcode2\', \'testTwo\');

function testThree(){
    return do_shortcode(\'[abc type="contact" orderby="menu_order" order="asc" style="list-post" logic="and" abc_tax_student="student3" abc_tax_teacher="\'.basename(get_permalink()).\'"]\');
}
add_shortcode(\'shortcode3\', \'testThree\');
因此,正如您所看到的,每个短代码都在拉动它所在页面的slug(这就是我正在努力实现的)。他们使用“和”逻辑,在每种情况下,学生都是不同的。

为什么只有第一个实例有效?我希望我对这些东西了解得更多!

提前谢谢各位,迈克

3 个回复
SO网友:tru.d

我认为您在短代码中有语法错误,比如缺少单引号。请正确检查代码。

SO网友:Milo

我认为您只是缺少了一些可以转义到php的单引号:

function testOne(){
    return do_shortcode(\'[abc abc_tax_teacher="\' . basename(get_permalink()) . \'"]\');
}
否则,abc shortcode函数看到的值实际上是.basename(get_permalink()).

get_permalink() 依靠全球$post 获取当前帖子ID。如果这没有输出预期的永久链接,可能是因为$post 已被其他查询污染。那样的话你可以试试get_permalink( get_queried_object_id() ) 显式提供主查询的post ID。

SO网友:macmike78

get_permalink() 只是没有切断它。这是我最后要做的,以防有一天有人尝试做同样的事情。。。

// Thank you Stack Exchange, Themify & Tuts+ (a little piece of each of you is in here). function managercontacts_post_lists_sc( $atts, $content = null, $tag ) { $current_page = sanitize_post( $GLOBALS[\'wp_the_query\']->get_queried_object() ); $slug = $current_page->post_name; extract( shortcode_atts( array( \'type\' => \'contact\', \'orderby\' => \'menu_order\', \'order\' => \'asc\', \'style\' => \'list-post\', \'logic\' => \'and\' ), $atts ) ); $args = \'\'; switch( $tag ) { case "bearings": $args = \'ptb_tax_vertical="bearings-sealing-products-power-transmission"\'; break; case "conveyor_belt": $args = \'ptb_tax_vertical="conveyor-belt-hose-rigging-hydraulics-service"\'; break; case "electrical": $args = \'ptb_tax_vertical="electrical-products"\'; break; case "engineered_products": $args = \'ptb_tax_vertical="engineered-products-services"\'; break; case "not_specified": $args = \'ptb_tax_vertical="not-specified"\'; break; case "specialty_valves": $args = \'ptb_tax_vertical="specialty-valves-actuators-instrumentation-service"\'; break; case "welding": $args = \'ptb_tax_vertical="welding-products-services"\'; break; } return do_shortcode(\'[ptb type="\'.$type.\'" orderby="\'.$orderby.\'" order="\'.$order.\'" style="\'.$style.\'" logic="\'.$logic.\'" \'.$args.\' ptb_tax_manager="\'.$slug.\'"]\'); wp_reset_query(); } add_shortcode( \'bearings\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'conveyor_belt\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'electrical\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'engineered_products\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'not_specified\', \'managercontacts_lists_sc\' ); add_shortcode( \'specialty_valves\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'welding\', \'managercontacts_post_lists_sc\' );

谢谢所有插话的人!

结束

相关推荐

Specific loop in Shortcode

我在做短码,我被困在这里了。以下是代码:add_shortcode(\'service-shortcode\', \'service_shortcode\'); function service_shortcode($atts) { extract( shortcode_atts( array( \'title\' => \'Service One\', \'icon\' => \'fa-briefcase\'

尝试将动态内容调用为ShortCode属性 - 小码农CODE - 行之有效找到问题解决它

尝试将动态内容调用为ShortCode属性

时间:2017-06-04 作者:macmike78

我正在尝试向现有(第三方)短代码添加动态属性。短代码在同一页上出现多次。当我这样做时(在functions.php中),我可以得到第一个正确输出的短代码,但其他的则不行。

function testOne(){
    return do_shortcode(\'[abc type="contact" orderby="menu_order" order="asc" style="list-post" logic="and" abc_tax_student="student1" abc_tax_teacher="\'.basename(get_permalink()).\'"]\');
}
add_shortcode(\'shortcode1\', \'testOne\');

function testTwo(){
    return do_shortcode(\'[abc type="contact" orderby="menu_order" order="asc" style="list-post" logic="and" abc_tax_student="student2" abc_tax_teacher="\'.basename(get_permalink()).\'"]\');
}
add_shortcode(\'shortcode2\', \'testTwo\');

function testThree(){
    return do_shortcode(\'[abc type="contact" orderby="menu_order" order="asc" style="list-post" logic="and" abc_tax_student="student3" abc_tax_teacher="\'.basename(get_permalink()).\'"]\');
}
add_shortcode(\'shortcode3\', \'testThree\');
因此,正如您所看到的,每个短代码都在拉动它所在页面的slug(这就是我正在努力实现的)。他们使用“和”逻辑,在每种情况下,学生都是不同的。

为什么只有第一个实例有效?我希望我对这些东西了解得更多!

提前谢谢各位,迈克

3 个回复
SO网友:tru.d

我认为您在短代码中有语法错误,比如缺少单引号。请正确检查代码。

SO网友:Milo

我认为您只是缺少了一些可以转义到php的单引号:

function testOne(){
    return do_shortcode(\'[abc abc_tax_teacher="\' . basename(get_permalink()) . \'"]\');
}
否则,abc shortcode函数看到的值实际上是.basename(get_permalink()).

get_permalink() 依靠全球$post 获取当前帖子ID。如果这没有输出预期的永久链接,可能是因为$post 已被其他查询污染。那样的话你可以试试get_permalink( get_queried_object_id() ) 显式提供主查询的post ID。

SO网友:macmike78

get_permalink() 只是没有切断它。这是我最后要做的,以防有一天有人尝试做同样的事情。。。

// Thank you Stack Exchange, Themify & Tuts+ (a little piece of each of you is in here). function managercontacts_post_lists_sc( $atts, $content = null, $tag ) { $current_page = sanitize_post( $GLOBALS[\'wp_the_query\']->get_queried_object() ); $slug = $current_page->post_name; extract( shortcode_atts( array( \'type\' => \'contact\', \'orderby\' => \'menu_order\', \'order\' => \'asc\', \'style\' => \'list-post\', \'logic\' => \'and\' ), $atts ) ); $args = \'\'; switch( $tag ) { case "bearings": $args = \'ptb_tax_vertical="bearings-sealing-products-power-transmission"\'; break; case "conveyor_belt": $args = \'ptb_tax_vertical="conveyor-belt-hose-rigging-hydraulics-service"\'; break; case "electrical": $args = \'ptb_tax_vertical="electrical-products"\'; break; case "engineered_products": $args = \'ptb_tax_vertical="engineered-products-services"\'; break; case "not_specified": $args = \'ptb_tax_vertical="not-specified"\'; break; case "specialty_valves": $args = \'ptb_tax_vertical="specialty-valves-actuators-instrumentation-service"\'; break; case "welding": $args = \'ptb_tax_vertical="welding-products-services"\'; break; } return do_shortcode(\'[ptb type="\'.$type.\'" orderby="\'.$orderby.\'" order="\'.$order.\'" style="\'.$style.\'" logic="\'.$logic.\'" \'.$args.\' ptb_tax_manager="\'.$slug.\'"]\'); wp_reset_query(); } add_shortcode( \'bearings\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'conveyor_belt\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'electrical\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'engineered_products\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'not_specified\', \'managercontacts_lists_sc\' ); add_shortcode( \'specialty_valves\', \'managercontacts_post_lists_sc\' ); add_shortcode( \'welding\', \'managercontacts_post_lists_sc\' );

谢谢所有插话的人!

相关推荐

Namespaced shortcode?

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