Como criar e vincular à página de administração de um plug-in?

8

OK Código completo:

<?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);
}

?>

POSTO ANTIGO

Oi pessoal,

Atualmente, estou escrevendo um plugin para o meu cliente no wordpress. O problema que estou tendo é que quando um usuário clica em editar para alterar um registro, não tenho certeza de como criar o link de administrador para fazer isso.

ie

<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>";
}

Sei que minha marcação para a tag provavelmente está errada, mas eu estava apenas testando. Preciso registrar um gancho para fazer isso.


fonte
Raramente você copiou parte da marcação da página quando ajustou a pergunta, apenas informando ..;)
t31os 30/11/10
Não fui eu. É assim que a pergunta era original. Eu apenas tentei esclarecer o título (que parece exigir duas).
Rarst
Pelo prefixo função esta parece ser algo construído em cima do WP e-Commerce plug-in ..?
Rarst
@ Steve: É seu problema que você não sabe quando / como ligar wpsc_product_seo_details()? Você o adicionou ao seu menu de alguma forma?
Jan Fabry
2
Ok, olhando para a sua solução, estou completamente perdido agora. :) Você poderia renomear sua pergunta para descrever com precisão o problema e o contexto? Para que outros possam se beneficiar com isso no futuro.
Rarst

Respostas:

6

Não tenho certeza do que você está tentando fazer.

Os links de administrador podem ser convenientemente criados com a admin_url()função, assim:

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

Com o que exatamente você tem problemas?

Rarst
fonte
Quando clico no link, recebo: Você não tem permissões suficientes para acessar esta página.
Desculpe, provavelmente não estou explicando isso muito bem. Eu tenho um item de submenu que quando você clica nele, você obtém uma lista de produtos. Eu tenho um botão de edição ao lado de cada produto e quando os cliques de administrador nesse botão ele vai para o url acima e chama a função relevante (que eu possa fazer uma forma de produto de edição etc)
Os produtos são tecnicamente tipos de postagem personalizados? O que é exatamente o link de edição? Ainda não tenho certeza, mas dê uma olhada no edit_post_link()que gera links de edição para postagens individuais.
Rarst
4

Você tem problemas para criar a página de administração ?

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>';
}
Jan Fabry
fonte
Eu atualizei o bloco de código na minha postagem original! - Espero que isso ajude, eu tenho certeza que o seu vai dizer "WTF"
3

Apenas algumas informações para marcar na discussão, e isso pode ser útil para você mais tarde.

Quando você está em uma página de plug-in, várias variáveis ​​administrativas são definidas, você pode criar um URL base a partir dessas variáveis ​​e gerar links a partir daí, supondo que você queira que aponte para a página atual do plug-in.

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

*/

Deseja adicionar seus próprios vars de consulta a esse URL, basta adicioná-los à variável criada acima usando 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
*/

Deveria funcionar em teoria, pelo menos, não testei o código, mas não vejo razão para não funcionar .. :)

t31os
fonte
Quero observar que o retorno da função adicionar página não funcionará. Não é o nome da página, é um identificador de tela mais complexo que é $hook_suffixglobal. Também é possível passar o conjunto associativo de coisas como primeiro argumento para, em add_query_arg()vez de chamar várias vezes.
Rarst
Não sei se sigo Rarst, o que exatamente é que não vai funcionar? Se o código não fizer o que foi planejado, removerei a resposta (o código que não funciona serve para nada).
T31os
Eu quis dizer que essa parte dos $my_hook = add_xxxx_pagecomentários de código $my_hooknão funcionará como substituto $plugin_pageporque são coisas diferentes. O código em si é sólido e está funcionando.
Rarst
Eu nunca sugeri isso como um substituto, apenas para que você pudesse se referir $my_hookno lugar desse var, porque eles geralmente têm o mesmo valor. Não sabe ao certo como são diferentes, veja como $plugin_pageé preenchido (wp-admin / admin.php) e, em seguida, veja como esse valor de menu é criado.
t31os 6/07/11
11
Sim, desculpe, começo cedo, o cérebro ainda não havia inicializado ... lol .. esqueça meus comentários anteriores ..;) vou remover essa parte da resposta.
T31os
2

Resolvido!

Tente complicar demais as coisas quando um simples condicional faria o truque na função principal chamada a partir da página.

function wpsc_display_products_seo(){

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

}

fonte
por que você não publicou todo o código?
Francisco Corrales Morales