Come creare e collegare alla pagina di amministrazione di un plug-in?


8

OK Codice 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);
}

?>

POST VECCHIO

Ciao ragazzi,

Attualmente sto scrivendo un plugin per il mio cliente in wordpress. Il problema che sto riscontrando è quando un utente fa clic su Modifica per modificare un record. Non sono sicuro di come creare il collegamento di amministrazione per farlo.

vale a dire

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

So che il mio markup per il tag è probabilmente sbagliato ma stavo solo testando. Devo registrare un hook per farlo.


Raramente hai copiato parte del markup della pagina quando hai modificato la domanda,
facendoti

Non sono stato io Ecco come era la domanda originale. Ho appena provato a chiarire il titolo (che a quanto pare richiederà due).
Rarst

Dal prefisso della funzione sembra qualcosa costruito sopra il plug-in WP e-Commerce? ..
Rarst

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

2
Ok, guardando la tua soluzione mi sono perso completamente ora. :) Potresti rinominare la tua domanda per descrivere con precisione problema e contesto? Quindi altri potranno trarne beneficio in futuro.
Rarst

Risposte:


6

Non sono sicuro di quello che stai cercando di fare.

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

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

Con cosa hai esattamente problemi?


Quando faccio clic sul collegamento, ottengo: Non hai autorizzazioni sufficienti per accedere a questa pagina.

Mi dispiace, probabilmente non lo sto spiegando molto bene. Ho un sottomenu che quando fai clic su di esso, ottieni un elenco di prodotti. Ho un pulsante di modifica accanto a ciascun prodotto e quando l'amministratore fa clic su quel pulsante, passa all'URL sopra e chiama la relativa funzione (quindi posso fare un modulo di modifica del prodotto ecc.)

I prodotti che tipo di posta sono tecnicamente personalizzati? Che cos'è esattamente il link di modifica? Non ne sono ancora sicuro, ma dai un'occhiata a edit_post_link()che genera collegamenti di modifica per singoli post.
Rarst

4

Problemi con la creazione della pagina di amministrazione ?

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

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

3

Solo alcune informazioni da taggare nella discussione, e questo potrebbe esserti utile in seguito.

Quando ti trovi in ​​una pagina di plug-in, vengono impostate varie variabili di amministrazione, puoi creare un URL di base da tali variabili e generare collegamenti da lì, supponendo che desideri che puntino alla pagina del plug-in corrente.

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

*/

Vuoi aggiungere i tuoi parametri di ricerca su quell'URL, semplicemente aggiungili alla variabile creata sopra 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
*/

Dovrebbe funzionare almeno in teoria, non ho testato il codice, ma non vedo alcun motivo per cui non funzionerebbe .. :)


Voglio notare che il ritorno della funzione Aggiungi pagina non funzionerà. Non è il nome della pagina, è l'identificatore dello schermo più complesso che diventa $hook_suffixglobale. Inoltre puoi passare array associativi di roba come primo argomento add_query_arg()invece di chiamare più volte.
Rarst

Non sono sicuro di seguire Rarst, che cosa non funzionerà esattamente? Se il codice non farà ciò che era previsto, rimuoverò la risposta (il codice che non funziona serve a poco).
t31os,

Intendevo questa parte $my_hook = add_xxxx_pagenei commenti sul codice, $my_hooknon funzionerà come sostituto $plugin_pageperché sono cose diverse. Il codice stesso è valido e funzionante.
Rarst

Non l'ho mai suggerito come rimpiazzo, solo che potresti fare riferimento al $my_hookposto di quel var, perché di solito hanno lo stesso valore. Non sei sicuro di come siano diversi, dai un'occhiata a come $plugin_pageviene riempito (wp-admin / admin.php), quindi dai un'occhiata a come viene creato quel valore di menu.
t31os,

1
Sì, hai ragione scusa, inizio precoce, il cervello non si è ancora avviato ... lol .. dimentica i miei precedenti commenti ..;) Rimuoverò quella parte della risposta.
t31os,

2

Risolto!

Prova a complicare eccessivamente le cose quando un semplice condizionale avrebbe fatto il trucco nella funzione principale chiamata dalla pagina.

function wpsc_display_products_seo(){

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

}

perché non hai pubblicato tutto il codice?
Francisco Corrales Morales,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.