php sprintf没有按预期工作

时间:2012-03-08 06:57:28

标签: php wordpress printf

$actions = array(
    'EDIT'   => sprintf('<a href="admin-ajax.php?action=%s&subaction=%s&course_id=%d" class="%s" id="%s">Edit</a>',
                    'abf_cm',
                    'edit_course',
                    $item['course_id'],
                    'thickbox edit-box',
                    'edit_'.$item['course_id']
                    ),
    'DELETE'    => sprintf('<a href="?page=%s&task=%s&action=%s&bookid=%s&noheader=true">Delete</a>','course_management','do_process','delete',$item['course_id']),
);

这样做,编辑部分没有显示。我做错了什么。 我也尝试过使用占位符

'EDIT'   => sprintf('<a href="admin-ajax.php?action=%1$s&subaction=%2$s&course_id=%4$d" class="%4$s" id="%5$s">Edit</a>',
                    'abf_cm',
                    'edit_course',
                    $item['course_id'],
                    'thickbox edit-box',
                    'edit_'.$item['course_id']
                    ),

但仍然没有结果。 我还注意到,当我删除早期版本中的class和id属性时,它可以正常工作。

请你能给我一个令人满意的解释并告诉我我在哪里做错了。

编辑:

我在Wordpress中使用它来使用WP_List_Table类创建自定义表

    function column_course_name($item ) {

    //Build row actions
    $actions = array(
        'EDIT'      => sprintf('<a href="admin-ajax.php?action=%s&subaction=%s&course_id=%d" class="%s" id="%s">Edit</a>',
                        'abf_cm',
                        'edit_course',
                        $item['course_id'],
                        'thickbox edit-box',
                        'edit_'.$item['course_id']
                        ),
        'DELETE'    => sprintf('<a href="?page=%s&task=%s&action=%s&bookid=%s&noheader=true">Delete</a>','book_management','do_process','delete',$item['course_id']),
    );

    //Return the title contents
    return sprintf('<a href="?page=book_management&action=viewnedit&bookid=%2$s">%1$s</a>%3$s',
        /*$1%s*/ strlen($item['course_name'])>0?$item['course_name']:'<span style="color:silver">(No Name)</span>',
        /*$2%s*/ $item['course_id'],
        /*$3%s*/ $this->row_actions($actions) //row_actions is a method in this class
    ); 
}

更新嗯,这很奇怪,但是当我使用单个类时(即当我删除标签的两个类之间的空间时)代码可以工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Dipesh,也许您在代码周围这个代码段中有错误。

尝试隔离检查您的代码。我将您的代码复制到单独的.php脚本中,设置很少,并使用$actions检查print_r数组,如下所示:

<强> edit_array.php

<?php
$item = array();
$item['course_id'] = 1;
$actions = array(
    'EDIT'   => sprintf('<a href="admin-ajax.php?action=%s&subaction=%s&course_id=%d" class="%s" id="%s">Edit</a>',
        'abf_cm',
        'edit_course',
        $item['course_id'],
       'thickbox edit-box',
       'edit_'.$item['course_id']
     ),
    'DELETE'    => sprintf('<a href="?page=%s&task=%s&action=%s&bookid=%s&noheader=true">Delete</a>','course_management','do_process','delete',$item['course_id']),
);

print_r($actions);

我从控制台运行此脚本并获得以下结果:

$ php edit_array.php 
Array
(
    [EDIT] => <a href="admin-ajax.php?action=abf_cm&subaction=edit_course&course_id=1" class="thickbox edit-box" id="edit_1">Edit</a>
    [DELETE] => <a href="?page=course_management&task=do_process&action=delete&bookid=1&noheader=true">Delete</a>
)

$actions['EDIT']的生成链接是HTML有效的,因此可以安全地断定您的代码本身运行正常,错误位于其他地方。