【问题标题】:Run custom shortcode twice in the same page在同一页面中运行两次自定义简码
【发布时间】:2015-01-15 20:38:26
【问题描述】:

我需要关于 wordpress 问题的帮助。

我创建了一个自定义简码,用于检索具有特定参数的表中的数据列表:

add_shortcode("archive", "archive_render");
function archive_render($atts) {

extract(shortcode_atts(array(
    "rientro" => "no",
    "year" => "",
), $atts));

global $wpdb;

$rientro == "si" ? $rientro = "yes" : "no";

$query = "SELECT event_name FROM wp_em_events WHERE EXTRACT(YEAR FROM event_end_date) = ".$year." AND event_end_date < CURDATE()";
$pasts_event = $wpdb->get_col($query);

function get_pasts_event( $pasts_event ){

    foreach ( $pasts_event as $past_event_slug ) {
        $output .= "<li><a href='".get_site_url()."/eventi/".$past_event_slug."'>$past_event_slug</a></li>";
    }

    return $output;
}

$string = '[one_third last="'.$rientro.'" class="" id=""][accordian class="" id=""][toggle title="'.$year.'" open="no"]<ul>'.get_pasts_event($pasts_event).'</ul>[/toggle][/accordian][/one_third]';

echo do_shortcode( $string );

}

我想检索与当前日期相比具有过去日期的所有事件。

如果我在页面中添加了两次简码,则只有第一个简码有效,页面停止显示其余内容。

谁能帮我解决这个问题?

【问题讨论】:

  • 页面的其余部分是停止还是只是第二个短代码的结果?您是否启用了调试模式?您的代码中可能存在一些错误。 codex.wordpress.org/Debugging_in_WordPress
  • 短代码不应输出任何内容。将 get_posts_event 函数移到简码之外,并将 echo 更改为 return。

标签: php wordpress shortcode


【解决方案1】:

wordpress 短代码应该返回一个字符串,而不是回显它 让我重新安排你的代码

function get_pasts_event( $pasts_event ){

    foreach ( $pasts_event as $past_event_slug ) {
        $output .= "<li><a href='".get_site_url()."/eventi/".$past_event_slug."'>$past_event_slug</a></li>";
    }

    return $output;
}

add_shortcode("archive", "archive_render");
function archive_render($atts) {

    extract(shortcode_atts(array(
        "rientro" => "no",
        "year" => "",
        ), $atts));

    global $wpdb;

    $rientro == "si" ? $rientro = "yes" : "no";

    $query = "SELECT event_name FROM wp_em_events WHERE EXTRACT(YEAR FROM event_end_date) = ".$year." AND event_end_date < CURDATE()";
    $pasts_event = $wpdb->get_col($query);


    $string = '[one_third last="'.$rientro.'" class="" id=""][accordian class="" id=""][toggle title="'.$year.'" open="no"]<ul>'.get_pasts_event($pasts_event).'</ul>[/toggle][/accordian][/one_third]';

    return $string;
}

【讨论】:

  • 感谢您帮助我。一个问题:为什么要放在 get_pasts_event() 函数之外?
  • 因为一般我们不应该在另一个函数中声明函数,虽然这不会产生错误,并且避免在主函数调用2x或更多时重新声明该函数。据我所知,全局函数没有范围。
猜你喜欢
  • 2017-05-13
  • 1970-01-01
  • 2017-07-23
  • 2020-08-20
  • 2018-03-04
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多