Wordpress functions.php不通过短代码返回结果

时间:2016-01-19 01:45:46

标签: php wordpress

在使用短代码时,我在获取以下代码(添加到主题的functions.php)时将结果返回到帖子时遇到了一些麻烦。

这是我在functions.php中输入的代码:

<?php

function foo_shortcode(){

    global $wpdb; 

    $r = $wpdb->get_results("SELECT 
                *
                FROM 
                    shows_16 c
                WHERE
                    c.status = 1
                GROUP BY
                    c.id
                ORDER BY
                    c.date_start ASC");

    $c1= '<div id="main-wrapper">   

        <table cellspacing="0" cellpadding="0">
                <tbody>
                <tr id="r1">
                    <td id="thead" colspan="4">EVENTS 2016</td>
                </tr>
                <tr id="r2">
                    <td id="c1" >Date</td>
                    <td id="c2" >Event</td>
                    <td id="c3" >City</td>
                    <td id="c4" >Details</td>
                </tr>';

    foreach ($r as $show_result) {


        $c2 .= '<tr id="rx" itemscope itemtype="http://schema.org/Event"><td id="x1"><meta itemprop="startDate" content="' . 
            $show_result["date_start"] . '">' . date('M j', strtotime($show_result['date_start'])) .
            (($show_result["date_start"] != $show_result["date_end"]) ? print ' - ' . 
            '<meta itemprop="endDate" content="'. $show_result["date_end"].'">' . 
            date('M j', strtotime($show_result["date_end"])) : "") . '</td><td id="x2">' . 
            ($show_result['url']=='') ? print '<span itemprop="name">'.$show_result["name"].
            '</span>' : print '<a itemprop="url" href="' . $show_result["url"] . 
            '" target="_blank"><span itemprop="name">'. $show_result["name"] . 
            '</span></a>') . '</td> <td id="x3" itemprop="location" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="addressLocality">'. 
            $show_result["city"] . '</span></td> <td id="x4" itemprop="description">' .  
            $show_result["details"]. '</td></tr>';

    }


    $c3 = '</tbody></table></div>';

    $c4 = $c1.$c2.$c3;

    return $c4;
}


add_shortcode('foo_sc', 'foo_shortcode');

?>

然后我在Wordpress帖子中使用以下短代码:

[foo_sc]

我期待的结果是一个填充了类似事件的表:

Jan 3   The Foo Event   Bar-city    Foo's Event details go here
Jan 4   The Bar Event   Foo-city    Bar's Event details go here
...

我在wordpress数据库中设置了“shows_16”表,它包含有效数据。

该函数返回$ c1,$ c3但不是$ c2的结果。

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:0)

您的 $c2 变量未正确初始化且无法在循环外访问,解决方案可能是将其初始化到您的循环之上

$c2 ="";
foreach ($r as $show_result) {


        $c2 .= '<tr id="rx" itemscope itemtype="http://schema.org/Event"><td id="x1"><meta itemprop="startDate" content="' . 
            $show_result["date_start"] . '">' . date('M j', strtotime($show_result['date_start'])) .
            (($show_result["date_start"] != $show_result["date_end"]) ? print ' - ' . 
            '<meta itemprop="endDate" content="'. $show_result["date_end"].'">' . 
            date('M j', strtotime($show_result["date_end"])) : "") . '</td><td id="x2">' . 
            ($show_result['url']=='') ? print '<span itemprop="name">'.$show_result["name"].
            '</span>' : print '<a itemprop="url" href="' . $show_result["url"] . 
            '" target="_blank"><span itemprop="name">'. $show_result["name"] . 
            '</span></a>') . '</td> <td id="x3" itemprop="location" itemscope itemtype="http://schema.org/PostalAddress"><span itemprop="addressLocality">'. 
            $show_result["city"] . '</span></td> <td id="x4" itemprop="description">' .  
            $show_result["details"]. '</td></tr>';

    }


    $c3 = '</tbody></table></div>';

    $c4 = $c1.$c2.$c3;

答案 1 :(得分:0)

我知道这是一个太过分的问题,但这是我的答案。 :d

如果您希望输出很长,最好使用ob_start()和ob_get_clean(),而不是简单地将字符串存储在变量中。

ob_start():http://php.net/manual/en/function.ob-start.php

ob_get_clean():http://php.net/manual/en/function.ob-get-clean.php

这应该是这样的:

ob_start();?>

//...create your HTML...
<?php
return ob_get_clean();