Come creare e collegare la pagina di amministrazione per un plugin?

30 nov 2010, 12:42:38
Visualizzazioni: 13.5K
Voti: 8

OK Codice Completo:

<?php

//verifica se l'utente è un amministratore o meno
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('Lista Prodotti','wpsc'); ?></h2>
<p>Di seguito è riportato un elenco di prodotti. Seleziona un prodotto per modificarne le proprietà SEO.</p>
    <table>
        <tr>
            <td></td>
            <td>Nome Prodotto</td>
            <td>Meta Title</td>
            <td>Meta Description</td>
            <td>Modifica</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; ?>">Modifica</a></td>
                </tr>
            <?php endforeach; ?>
        <?php endif; ?>
    </table>

<?php

}

function wpsc_product_seo_details()
{
    echo "<h2>Ciao</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 Per Prodotti','wpsc'),  __('SEO Per Prodotti','wpsc'), 7, 'wpsc-module-seo', 'wpsc_display_products_seo');
        return $page_hooks;
    }
    add_filter('wpsc_additional_pages', 'wpsc_add_seo_admin_pages',10, 2);
}

?>

POST PRECEDENTE

Ciao a tutti,

Attualmente sto scrivendo un plugin per il mio cliente in WordPress. Il problema che sto riscontrando è che quando un utente clicca su modifica per cambiare un record non sono sicuro di come creare il link di amministrazione per fare questo.

cioè:

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


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

So che il mio markup per il tag è probabilmente sbagliato ma stavo solo facendo dei test. Ho bisogno di registrare un hook per fare questo.

6
Commenti

Rarst hai copiato parte del markup della pagina quando hai modificato la domanda, te lo faccio solo sapere.. ;)

t31os t31os
30 nov 2010 13:03:22

Non sono stato io. La domanda originale era così. Ho solo cercato di chiarire il titolo (cosa che sembra richiederà un secondo tentativo).

Rarst Rarst
30 nov 2010 13:10:27

Dal prefisso della funzione sembra qualcosa costruito sopra il plugin WP e-Commerce?..

Rarst Rarst
30 nov 2010 13:29:11

@Steve: Il tuo problema è che non sai quando/come chiamare wpsc_product_seo_details()? L'hai aggiunto in qualche modo al tuo menu?

Jan Fabry Jan Fabry
30 nov 2010 13:30:46

Ok, ho risolto. Ho semplicemente usato lo stesso URL e aggiunto un condizionale alla funzione che viene chiamata dal menu. Grazie per tutto l'aiuto.

User User
30 nov 2010 13:46:18

Ok, guardando la tua soluzione ora sono completamente perso. :) Potresti per favore rinominare la tua domanda per descrivere accuratamente il problema e il contesto? Così altri potranno trarne beneficio in futuro.

Rarst Rarst
30 nov 2010 13:49:24
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 4
3

Non sono sicuro di cosa tu stia cercando di fare.

I link di amministrazione possono essere creati comodamente con la funzione admin_url(), in questo modo:

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

Con cosa esattamente hai problemi?

30 nov 2010 12:54:31
Commenti

Quando clicco sul link, ottengo: Non hai i permessi sufficienti per accedere a questa pagina.

User User
30 nov 2010 12:57:37

Scusami probabilmente non mi sto spiegando molto bene. Ho una voce del sottomenu che, quando la clicchi, mostra un elenco di prodotti. Accanto a ogni prodotto c'è un pulsante di modifica e quando l'amministratore clicca su quel pulsante va all'URL sopra e chiama la funzione rilevante (così posso fare un modulo di modifica prodotto ecc.)

User User
30 nov 2010 13:01:33

I prodotti sono cosa tecnicamente, custom post types? Qual è esattamente il link di modifica? Non sono ancora sicuro, ma dai un'occhiata a edit_post_link() che genera link di modifica per i singoli post.

Rarst Rarst
30 nov 2010 13:06:24
1

Hai problemi creando la pagina di amministrazione?

add_action( 'admin_menu', 'wpse4677_admin_menu' );
function wpse4677_admin_menu()
{
    add_options_page(
        'Titolo pagina WPSE 4677', // Titolo della pagina
        'Titolo voce menu WPSE 4677', // Titolo nel menu
        'manage_options', // Capacità minima per visualizzare questa pagina
        'wpse4677-page-identifier', // Identificativo univoco
        'wpse4677_page_content' // Funzione callback per ottenere i contenuti
    );
}

function wpse4677_page_content()
{
    echo '<div class="wrap">';
    echo '<h2>Benvenuto nella mia pagina!</h2>';
    echo '</div>';
}
30 nov 2010 12:57:45
Commenti

Ho aggiornato il blocco di codice nel mio post originale! - Spero che aiuti, sono sicuro che dirai "WTF"

User User
30 nov 2010 13:13:59
6

Alcune informazioni da aggiungere alla discussione, che potrebbero esserti utili in seguito...

Quando sei nella pagina di un plugin, vengono impostate diverse variabili di amministrazione. Puoi costruire un URL base da queste variabili e generare link da lì, assumendo che tu voglia che puntino alla pagina del plugin corrente.

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

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

*/

Se vuoi aggiungere i tuoi query var a quell'URL, aggiungili semplicemente alla variabile creata sopra usando add_query_arg...

$edit_link = add_query_arg( 'edit_id', $id, $this_page );
/*
   Solo un esempio, $id dovrebbe provenire dal tuo codice
   e $edit_link generato appropriatamente per ogni risultato che visualizzi
*/

Dovrebbe funzionare almeno in teoria, non ho testato il codice, ma non vedo motivi per cui non dovrebbe funzionare.. :)

30 nov 2010 16:54:45
Commenti

Voglio far notare che il valore restituito dalla funzione add page non funzionerà. Non è il nome della pagina, ma un identificatore di schermata più complesso che va nella variabile globale $hook_suffix. Puoi anche passare un array associativo come primo argomento a add_query_arg() invece di chiamarlo più volte.

Rarst Rarst
5 lug 2011 19:48:53

Non sono sicuro di aver capito Rarst, cosa esattamente non funzionerà? Se il codice non fa ciò per cui era destinato, allora rimuoverò la risposta (il codice che non funziona serve a poco).

t31os t31os
6 lug 2011 13:05:52

Mi riferivo a questa parte $my_hook = add_xxxx_page nei commenti del codice, $my_hook non funzionerà come sostituto di $plugin_page perché sono cose diverse. Il codice in sé è corretto e funzionante.

Rarst Rarst
6 lug 2011 13:39:08

Non ho mai suggerito che fosse una sostituzione, solo che potresti fare riferimento a $my_hook al posto di quella variabile, perché di solito contengono lo stesso valore. Non sono sicuro di come siano diversi, dai un'occhiata a come viene riempito $plugin_page (wp-admin/admin.php), poi guarda come viene creato quel valore del menu.

t31os t31os
6 lug 2011 14:24:38

Scusa, non capisco. Stai suggerendo che sono uguali o no? Cosa significa fare riferimento al posto della variabile? Il ritorno di add_*_page() è $page_type . '_page_' . $plugin_name, non vedo come possa finire per essere uguale a $plugin_page.

Rarst Rarst
6 lug 2011 15:54:12

Sì, hai ragione, scusa, era mattina presto, il cervello non si era ancora completamente avviato... lol... dimentica i miei commenti precedenti.. ;) Rimuoverò quella parte della risposta.

t31os t31os
6 lug 2011 16:26:07
Mostra i restanti 1 commenti
1

Risolto!

Cercavo di complicare le cose quando un semplice condizionale avrebbe fatto al caso nella funzione principale chiamata dalla pagina.

function wpsc_display_products_seo(){

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

}
30 nov 2010 13:47:24
Commenti

perché non hai pubblicato tutto il codice?

Francisco Corrales Morales Francisco Corrales Morales
6 feb 2014 17:44:54