如何创建并链接到插件的管理页面?


8

确定完整代码:

<?php

//check to see whether the user is an admin or not.
if (is_admin()) {


function wpsc_display_products_seo(){
global $wpdb;
$productList = $wpdb->get_results("SELECT * FROM " . WPSC_TABLE_PRODUCT_LIST . " ORDER BY name ASC");
echo  get_admin_page_parent(); 

$path = 'admin.php?page=wpsc_product_seo_details';
$url = admin_url($path);


?>
<h2><?php _e('Products List','wpsc'); ?></h2>
<p>Below is a list of products. Select a product to edit it's SEO properties.</p>
    <table>
        <tr>
            <td></td>
            <td>Product Name</td>
            <td>Meta Title</td>
            <td>Meta Description</td>
            <td>Edit</td>
        </tr>
    </table>

    <table>
        <?php if($productList) : ?>
            <?php foreach($productList as $product) : ?>
                <?php $meta = getProductMeta($product->id); ?>
                <tr style="background:#fff;">
                    <td width="200"><?php echo $product->name; ?></td>
                    <td width="300"><?php getVal($meta, 'meta_title'); ?></td>
                    <td width="200"><?php getVal($meta, 'meta_description'); ?></td>
                    <td width="200"><?php getVal($meta, 'meta_keywords'); ?></td>
                    <td width="200"><a href="<?php echo $url; ?>">Edit</a></td>
                </tr>
            <?php endforeach; ?>
        <?php endif; ?>
    </table>

<?php

}

function wpsc_product_seo_details()
{
    echo "<h2>Hello</h2>";
}

function getProductMeta($id)
{
    global $wpdb;
    $meta = $wpdb->get_results("SELECT * FROM " . WPSC_TABLE_PRODUCT_META . " WHERE product_id = $id");
    if($meta)
    {
        return $meta;
    } else {
        return null;
    }
}

function getVal($RS, $key)
{
    if($RS)
    {
        if (property_exists($RS, $key))
        {
            return $RS->$key;
        } 
    }
    return null;

}




    function wpsc_add_seo_admin_pages($page_hooks, $base_page) {
        $page_hooks[] =  add_submenu_page($base_page, __('SEO For Products','wpsc'),  __('SEO For Products','wpsc'), 7, 'wpsc-module-seo', 'wpsc_display_products_seo');
        return $page_hooks;
    }
    add_filter('wpsc_additional_pages', 'wpsc_add_seo_admin_pages',10, 2);
}

?>

旧帖子

嗨,大家好,

我目前正在用wordpress为客户编写插件。我遇到的问题是,当用户单击“编辑”以更改记录时,我不确定如何创建管理链接来执行此操作。

<a href="<?php echo get_bloginfo('url'); ?>/wp-admin/admin.php?page=wpsc_product_seo_details">Edit</a>


function wpsc_product_seo_details()
{
    echo "<h2>Hello</h2>";
}

我知道我的标签标记可能是错误的,但我只是在测试。我需要注册一个钩子来做到这一点。


调整您的问题时,您最奇怪地复制了一些页面标记,只是让您知道..;)
t31os 2010年

不是我 那是原始的问题。我只是想弄清楚标题(似乎需要两个)。
罗斯特(Rarst)2010年

该函数的前缀,这似乎是建立在WP电子商务插件的顶部东西..?
Rarst

@Steve:您的问题是您不知道何时/如何打电话wpsc_product_seo_details()吗?您是否以某种方式将其添加到菜单?
Jan Fabry 2010年

2
好吧,看着您的解决方案,我现在完全迷失了。:)您能否重命名您的问题以准确描述问题和上下文?因此,其他人将来可以从中受益。
拉斯特

Answers:


6

我不确定您要做什么。

可以使用admin_url()功能方便地创建管理链接,如下所示:

$path = 'admin.php?page=wpsc_product_seo_details';
$url = admin_url($path);
$link = "<a href='{$url}'>Edit</a>";
echo $link;

您到底有什么问题?


当我单击链接时,我得到:您没有足够的权限访问此页面。

抱歉,我可能无法很好地解释这一点。我有一个子菜单项,当您单击它时,您会获得产品列表。我在每个产品旁边都有一个编辑按钮,当管理员单击该按钮时,它会转到上方的url并调用相关功能(因此,我可以执行产品编辑表格等)

产品在技术上是自定义帖子类型?什么是编辑链接?我仍然不确定,但请看edit_post_link()哪个会为单个帖子生成编辑链接。
拉斯特

4

您在创建管理页面时遇到问题吗?

add_action( 'admin_menu', 'wpse4677_admin_menu' );
function wpse4677_admin_menu()
{
    add_options_page(
        'WPSE 4677 Page title',
        'WPSE 4677 Menu item title',
        'manage_options', // Minimum capability to view this page
        'wpse4677-page-identifier', // Unique identifier
        'wpse4677_page_content' // Callback function to get the contents
    );
}

function wpse4677_page_content()
{
    echo '<div class="wrap">';
    echo '<h2>Welcome to my page!</h2>';
    echo '</div>';
}

我已经更新了原始帖子中的代码块!-希望这会有所帮助,我确定您会说“ WTF”

3

只是一些要标记在讨论中的信息,这以后对您可能有用。

在插件页面上时,会设置各种管理变量,您可以从这些变量构建基本URL并从那里生成链接,假设您希望它们指向当前插件页面。

global $pagenow, $plugin_page;
$this_page = add_query_arg( 'page', $plugin_page, admin_url( $pagenow ) );
/* 
   Example URL
   themes.php?page=custom-background 

   $pagenow     - themes.php
   $plugin_page - custom-background

*/

想要将您自己的查询变量添加到该URL,只需将它们添加到上面使用add_query_arg... 创建的变量中即可 。

$edit_link = add_query_arg( 'edit_id', $id, $this_page );
/*
   Example only, $id would need to come from your code
   and $edit_link generated appropriately for each result you display
*/

它至少应该在理论上起作用,我没有测试代码,但是我看不出它不起作用的原因.. :)


我想指出,添加页面功能的返回将不起作用。它不是页面名称,它是进入$hook_suffix全球的更复杂的屏幕标识符。同样,您可以将东西的关联数组作为第一个参数传递,add_query_arg()而不是多次调用。
罗斯特(Rarst)2011年

我不确定我是否遵循Rarst,这到底是什么不起作用?如果代码无法执行预期的操作,那么我将删除答案(无效的代码没有什么用处)。
t31os 2011年

我的意思是这部分 $my_hook = add_xxxx_page是代码注释中的$my_hook将无法代替,$plugin_page因为它们是不同的东西。该代码本身是正确且有效的。
拉斯特2011年

我从来没有建议将其作为替代品,只有您可以参考 $my_hook通常可以使用相同的值代替该var。不确定它们的不同之处,先看看如何$plugin_page填充(wp-admin / admin.php),然后再看看如何创建菜单值。
t31os 2011年

1
是的,对不起,早点开始,您的大脑还没有完全启动。。。
t31os 2011年

2

解决!

当简单的条件操作可以完成从页面调用的主函数中的技巧时,请尝试使事情变得过于复杂。

function wpsc_display_products_seo(){

    if($_GET['pid'] != "") 
    {
        renderProductForm();
    } else {
        renderProductList();
    }

}

为什么您没有发布所有代码?
Francisco Corrales Morales 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.