创建将提取特定自定义帖子类型的简码。使用the_title()用于测试目的。简码本身运行良好(回显属性值)。在短代码之外使用时的查询也可以正常工作。但是,首先要查询简码中的帖子类型,首先要花很多时间来加载。当最终完成时,它会多次重复使用先前使用的简码的shortcode属性。标题不显示。 因此,假设我在同一页面上使用了2个短代码。
简码1(有问题的代码):
[custom-table custom="here we are gonna have a slug"]
简码2:
[custom-button width="300px" bg="#29b938" color="#ffffff" padding="25px 35px" text="Start Your Diet" font="25px" weight="bold" style="" url="http://google.com" new-tab="true"]
简码1的代码
function tables_shortcode($atts) {
ob_start();
extract(shortcode_atts(array(
'custom'=> 'none'
), $atts));
$tabargs = array(
'posts_per_page' => -1,
'offset' => 0,
'post_type' => 'customtables'
);
$tabs = new WP_Query($tabargs);
if ( have_posts() ) while ($tabs->have_posts()) : $tabs->the_post();
the_title();
endwhile;
wp_reset_postdata();
echo $atts['custom'];
return ob_get_clean();
}
add_shortcode('custom-table','tables_shortcode');
简码2的代码(可以正常工作)
function custom_button($atts) {
ob_start();
extract(shortcode_atts(array(
'width' => '200',
'bg' => '#000',
'color' => '#fff',
'padding' => '10px 20px',
'text' => 'Visit Now',
'font' => '20px',
'weight' => '300',
'style' => 'normal',
'url' => '#',
'new-tab'=> 'false'
), $atts));
?>
<div class="inrevbtn">
<a class="custombtn" href="<?php echo $atts['url'];?>" <?php if ($atts['new-tab'] == 'true') { echo 'target="_blank"'; } ?>>
<?php echo $atts['text']; ?>
</a>
</div>
<?php
return ob_get_clean();
}
add_shortcode('custom-button', 'custom_button');
答案 0 :(得分:1)
按钮上的语法非常混乱。您的第一个href报价是本地的,但是第二个报价正在被回显。即使是对于IDE,也确实很难阅读和解析。此外,如果您不打算使用提取的变量(例如,用$text
代替$atts['text']
,则无需使用extract()
-请注意,带有破折号的变量将无法获取提取是因为$new-tab
不是有效变量,但是$new_tab
和$newtab
是有效的,因此,如果要使用{{1 }}。
在第二个简码中,您要检查全局查询是否包含带有extract()
的帖子,而应该从have_posts()
自定义WP查询中运行该方法。
您的$tabs
中也存在语法错误,您没有以if
或:
开头,因此以{
或{ endif;
-我认为这是造成您问题的原因。
尝试类似这样的按钮代码:
}
对于您的表代码,如下所示:
add_shortcode('custom-button', 'custom_button');
function custom_button($atts){
extract(shortcode_atts(array(
'width' => '200',
'bg' => '#000',
'color' => '#fff',
'padding' => '10px 20px',
'text' => 'Visit Now',
'font' => '20px',
'weight' => '300',
'style' => 'normal',
'url' => '#',
'newtab' => false
), $atts));
ob_start();
?>
<div class="inrevbtn">
<a class="custombtn" href="<?php echo $url; ?>" <?php echo ($newtab == 'true') ? 'target="_blank"' : ''; ?>>
<?php echo $text; ?>
</a>
</div>
<?php
return ob_get_clean();
}
旁注,您可能需要澄清一下类名/变量名/变量名。 add_shortcode('custom-table', 'tables_shortcode');
function tables_shortcode($atts) {
extract(shortcode_atts(array(
'custom'=> 'none'
), $atts));
ob_start();
$tabargs = array(
'posts_per_page' => -1,
'offset' => 0,
'post_type' => 'customtables'
);
$tabs = new WP_Query( $tabargs );
if( $tabs->have_posts() ){
while( $tabs->have_posts() ) : $tabs->the_post();
the_title();
endwhile;
wp_reset_postdata();
echo $custom;
}
return ob_get_clean();
}
和$tabargs
听起来像是在代码中创建了选项卡式项目。将这些名称更改为更多的语义名称(如$tabs
和$table_args
以便一目了然地识别它们,几乎几乎是零开销。
祝你好运!