PHP:如何在插件中正确访问数据库?

时间:2013-08-21 作者:Jehanzeb.Malik

我想我会在互联网上找到我的问题的答案,但我没能找到。这不是一个大问题,但由于这是我的第一个插件,我想在提交之前确保一切正常。

我所做的是根据管理员从仪表板的设置面板中选择的值添加导航菜单的链接。我在自定义javascript中访问db,将数据添加到表中(在管理仪表板中),然后使用“wp\\u nav\\u menu\\u items”过滤器在另一个php脚本中获取该数据。

我用过

wp_localize_script( \'my-ajax-request\', \'accessDB\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
掌握admin-ajax.php 路径然后,我将ajax调用发送到accessDB.ajaxurl. 这部分工作正常。我认为这是在Wordpress插件中进行ajax调用的正确方法。如果没有,请纠正我。

第二部分是我必须从db中获取值的地方。这是我在wordpress过滤器挂钩中需要的值wp_nav_menu_items. 事情是这样的:

function add_custom_menu_link($items, $args) {

    global $wpdb;
    $row = $wpdb->get_row("SELECT * FROM " . $wpdb->prefix . "custom_table");

    if (count($row) > 0) {
        return $items . "<li class=\'menu-item\'><a href=\'" . $row->url . "\' target=\'_blank\'>Custom Link</li>";
    } else {
        return $items;
    }
}

add_filter(\'wp_nav_menu_items\', \'add_custom_menu_link\', 10, 2);
所以我的问题是,我的做法是否正确,还是必须使用cURL来获取数据admin-ajax.php? 或者我还错过了其他什么方式?

当做

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

我不明白它是否对你有用。

对我来说,代码是not 错了,可能可以优化。

对于ajax请求,如果是在后端发出的,则不需要使用wp_localize_script. 来自WP 2.8 a全局变量ajaxurl 定义为在管理区域的ajax调用中使用。因此,您可以删除wp_localize_script 并直接使用ajaxurl 在javascript中。

db请求中的第二次优化。现在它工作了,(或者至少对我来说应该是这样),但是如果您只需要变量$row->url 您可以使用$wpdb->get_var, 像这样:

$url = $wpdb->get_var("SELECT url FROM " . $wpdb->prefix . "custom_table");
if ( filter_var($url, FILTER_VALIDATE_URL) ) {
    return $items . "<li class=\'menu-item\'><a href=\'" . esc_url($url) . "\' target=\'_blank\'>Custom Link</li>";
} else {
   return $items;
}
奇怪的是,SQL中缺少了一个WHERE子句。似乎在自定义表中只保存了一个值。如果是这样,使用标准选项表和get_option / update_option 获取并保存值。

结束