سؤال

أواجه بعض الشيء مع الرموز المختصرة التلقائية ، بناءً على إدخالات قاعدة البيانات.

أنا قادر على الحصول على رمز قصير عادي يعمل أي:

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top