رموز ووظائف ديناميكية في WordPress
سؤال
أواجه بعض الشيء مع الرموز المختصرة التلقائية ، بناءً على إدخالات قاعدة البيانات.
أنا قادر على الحصول على رمز قصير عادي يعمل أي:
function route_sc5() {
return "<div>Route 5</div>";
}
add_shortcode('route 5','route_sc');
وسيكون الرمز القصير التالي لتنشيطه [route 5]
هذا يعمل. لكن ما أحتاجه هو أن يتم إنتاج الرمز القصير لكل إدخال قاعدة بيانات. شيء مثل:
$routes = $wpdb->get_results( $wpdb->prepare("SELECT * FROM wp_routes") );
foreach($routes as $route)
{
function route_sc$route->id () {
return "<div>Route $route->id</div>";
}
add_shortcode('route $route->id','route_sc$route->id');
}
ما سبق هو مجرد مثال على كيفية عمله. ليس حرفيا الرمز الذي أستخدمه. كيف يمكنني تحقيق هذا؟ ): شكرًا.
المحلول
فيما يلي مثال على عمليات الاسترجاعات Dynamic Shortcode باستخدام PHP 5.3 وظائف مجهولة:
for( $i = 1; $i <= 5; $i++ ) {
$cb = function() use ($i) {
return "<div>Route $i</div>";
};
add_shortcode( "route $i", $cb );
}
يجب أن أسأل ، على الرغم من: هل يمكنك فقط تحقيق ما تحتاج إلى القيام به باستخدام وسيطات الرمز القصير؟ بمعنى آخر. [route num=3]
. ثم يمكنك الحصول على واحدة فقط handle_route()
وظيفة وواحد [route]
الرمز القصير ، والذي قد يبسط الأشياء.
أيضًا ، على الرغم من أنه من الناحية الفنية ، يمكنك تضمين رمز قصير مع مساحة في الاسم ، أعتقد أنه يخلق غموضًا مربكًا. إذا قررت أنك بحاجة إلى رموز مختصرة محددة لكل مسار ، فإنني أوصي بـ "Route5" أو "Route-5" بدلاً من "Route 5."
نصائح أخرى
شكرا يا رفاق ، وأخيرا حصلت عليه العمل. فيما يلي رمز أي شخص قد يحتاجون إليه في المستقبل:
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"]
أسماء الوظائف الديناميكية غير ممكنة في PHP.
لكن يمكنك تجربة التقييم.
eval('function route_sc'.$route->id.' () { return "<div>Route '.$route->id.'</div>"; }');
اذهب حولها بطريقة مختلفة: يمكن أن تأخذ الرموز المختصرة المعلمات. لذلك بدلا من [route 5]
فعل [route rt="5"]
. وبهذه الطريقة ، تبقى وظيفة معالجة الرمز القصير العام العام والجزء الذي يُقصد من التغييرات أن تكون ديناميكية. هذا يعني أيضًا أنه إذا تم مواجهة رمز قصير غير متوقع أثناء تحميل الصفحة ، يمكنك التعامل معه بشكل صحيح بدلاً من WordPress ، ما عليك سوى تجريد الكود واستبداله بأي شيء.
انظر هنا لمزيد من المعلومات: http://codex.wordpress.org/shortcode_api