2010-08-23 6 views
2

데이터베이스 항목을 기반으로하는 단축 코드 자동 생성 문제가 있습니다. 그것은이 작동 [route 5]WordPress의 동적 단축 코드 및 기능

function route_sc5() { 
     return "<div>Route 5</div>"; 
    } 
    add_shortcode('route 5','route_sc'); 

및 활성화하려면 다음 단축 코드 :

나는 정상적인 단축 코드 작업 즉를 얻을 수 있어요. 하지만 필요한 것은 각 데이터베이스 항목에 대해 단축 코드를 생성하는 것입니다. 예 :

위의 내용은 내가 작동시키려는 예입니다. 말 그대로 코드를 사용하고 있습니다. 이 일을 어떻게 성취 할 수 있습니까?) : 감사합니다.

+1

에서 당신은 wordpress.stackexchange을 의미 –

+4

도 :-) wordpress.stackoverflow.com 사이트에서이 일을 물어보십시오 : 여기에 미래에 필요할 수 있습니다 any1의 코드는 .com :-) –

+0

덕분에, 나는 이것과 같은 wordpress 포럼이 있다는 것을 몰랐다. 북마크 된 (Y) –

답변

2

는 여기에 PHP 5.3 anonymous functions를 사용하여 동적 단축 코드 콜백의 예입니다 당신은 당신이 단축 코드 인수를 사용하여해야 할 일을 수행 할 수 있습니다? 즉. [route num=3]. 그러면 handle_route() 기능과 [route] 단축 코드 중 하나를 사용하면 간단해질 수 있습니다.

또한 기술적으로는 이름에 공백이있는 짧은 코드를 포함 할 수 있지만 혼동을 야기 할 수 있습니다. 각 경로마다 특정 단축 코드가 필요하다고 판단되면 "route 5"가 아닌 "route 5"또는 "route-5"를 권합니다.

+0

실제로 이것은

route $id
에 있습니다 (이것은 단지 예제 일뿐입니다) .. 데이터베이스에 저장된 값으로 설정된 클래스를 가진 div 세트입니다. style = backround 색상도 데이터베이스의 값으로 설정됩니다. 데이터베이스에서 경로 이름으로. 하나의 hanle_route() 함수를 사용하면 사용자가 다음과 같은 작업을 수행하지 않고이 데이터를 가져올 수 있음을 완전히 이해하지 못합니다. [route num = 5 bgcolor = # 123456 class = W] 가능한 한 사용자를 위해 간소화 할 수 있는지 확인해보십시오. –

1

PHP에서는 동적 함수 이름을 사용할 수 없습니다.

하지만 eval을 시도해 볼 수 있습니다. 하지만, 내가 물어 봐야

for($i = 1; $i <= 5; $i++) { 
    $cb = function() use ($i) { 
     return "<div>Route $i</div>"; 
    }; 

    add_shortcode("route $i", $cb); 
} 

:

eval('function route_sc'.$route->id.'() { return "<div>Route '.$route->id.'</div>"; }'); 
+0

동적 함수 이름은 PHP에서 완벽하게 가능하다 : "$ func = 'my_function'; $ func();" –

+0

@Bobby [가변 함수] (http://php.net/manual/en/functions.variable-functions.php)를 쉽게 호출 할 수 있지만 만들 수는 있습니다. –

0

다른 방법으로 이동하십시오. 단축 코드는 매개 변수를 사용할 수 있습니다. 따라서 [route 5] 대신 [route rt="5"]을 수행하십시오. 이렇게하면 단축 코드 처리 기능이 일반으로 유지되고 변경되는 부분은 동적으로 처리됩니다. 또한 예기치 않은 단축 코드가 페이지로드 중에 발생하면 WordPress 대신 코드를 제거하고 아무것도 대체하지 않고 올바르게 처리 할 수 ​​있음을 의미합니다.

더 많은 정보를 원하시면 여기를 참조하십시오 : http://codex.wordpress.org/Shortcode_API

3

감사들, 마침내 일하고 있어요.

function route_sc($atts, $content = null) { 
    extract(shortcode_atts(array(
    'num' => '', 
    'bg' => '', 
    'text' => '', 
), $atts)); 
    global $wpdb; 
    $bus = $wpdb->get_row($wpdb->prepare("SELECT * FROM wp_route WHERE id = '$num'")); 
    return "<div class='".$bus->text_colour."' style='background-color:".$bus->bg_colour."'>".$bus->route_id."</div></div>"; 
} 
add_shortcode('route','route_sc'); 

단축 코드와 [route num="5a"]