Wordpress中的类别过滤器短代码报价问题

时间:2014-05-12 17:02:25

标签: php wordpress shortcode

我一直试图摆脱这个问题几天。我知道问题出在哪里,但无法弄清楚如何解决问题。请先看一下代码:

function portfolio_list_shortcode($atts){

    $q = new WP_Query(
        array('posts_per_page' => -1, 'post_type' => 'portfolio')
        );      


    $list = '$terms = get_terms("portfolio_cat");
            $count = count($terms);
                echo '<div id="wrap"><div class="filtering"><div class="filter" data-filter="all">Show All</div>';

            if ( $count > 0 ){

                foreach ( $terms as $term ) {

                    $termname = strtolower($term->name);
                    $termname = str_replace(' ', '-', $termname);
                  echo '<div class="filter" data-filter=".'.$termname.'">'.$term->name.'</div>';
                }
            }';

    $list.= '</div><div id="Container">';

    while($q->have_posts()) : $q->the_post();
        $idd = get_the_ID();

        $list .= '<div class="mix '.$termname.'">'.get_the_post_thumbnail('portfolio-thumb').'</div>'; 

    endwhile;
    $list.= '</div></div>';
    wp_reset_query();
    return $list;
}
add_shortcode('portfolio', 'portfolio_list_shortcode');  

运行上面的代码会导致以下错误:

Parse error: syntax error, unexpected 'id' (T_STRING)

我如何摆脱echo ' ';,因为我已在return ' '

中使用单引号

由于

1 个答案:

答案 0 :(得分:0)

我对wordpress知之甚少,也不知道它为什么会这样,但嵌套引号三次可能会让人很困惑,如果可能的话应该避免使用。

您的示例中的PHP在以下几个方面无效:

  1. 报价未正确转义
  2. PHP中的一些HTML只是用PHP编写而不是回显
  3. 您的函数正在返回PHP代码
  4. 它需要一些彻底的修复,但如果不解释函数应该做什么,我就无法回答。它应该返回任何东西,如果是,它应该返回什么?

    假设它不应该返回任何内容,只是打印一些HTML,你可能会寻找这样的东西:

    function categories() {
        $terms = get_terms("portfolio_cat");
        $count = count($terms);
        echo '<li><a href="javascript:void(0)" title="" data-filter=".all" class="active">All</a></li>';
    
        if ( $count > 0 ){
            foreach ( $terms as $term ) {
                $termname = strtolower($term->name);
                $termname = str_replace(' ', '-', $termname);
                echo '<li><a href="javascript:void(0)" title="" data-filter=".'.$termname.'">'.$term->name.'</a></li>';
            }
        }
    }
    

    处理凌乱的代码时,一个很好的提示是使用带语法高亮的文本编辑器。它可以更容易地发现缺失和未转义的引号,分号,拼写错误的函数名称和缺少大括号。为此,我强烈推荐使用Notepad ++或SumblimeText。