自定义帖子类型查询以短码创建空白无限循环

时间:2019-01-30 22:42:26

标签: php wordpress

创建将提取特定自定义帖子类型的简码。使用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');

1 个答案:

答案 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以便一目了然地识别它们,几乎几乎是零开销。

祝你好运!