Cum să creezi și să faci legătura către pagina de administrare pentru un plugin

30 nov. 2010, 12:42:38
Vizualizări: 13.5K
Voturi: 8

OK Cod Complet:

<?php

//verifică dacă utilizatorul este administrator sau nu
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 Produselor','wpsc'); ?></h2>
<p>Mai jos este o listă de produse. Selectați un produs pentru a edita proprietățile SEO.</p>
    <table>
        <tr>
            <td></td>
            <td>Nume Produs</td>
            <td>Titlu Meta</td>
            <td>Descriere Meta</td>
            <td>Editare</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; ?>">Editare</a></td>
                </tr>
            <?php endforeach; ?>
        <?php endif; ?>
    </table>

<?php

}

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

?>

POSTARE VECHE

Salut,

În prezent scriu un plugin pentru clientul meu în WordPress. Problema pe care o am este că atunci când un utilizator face clic pe editare pentru a modifica o înregistrare, nu sunt sigur cum să creez link-ul de administrare pentru aceasta.

adică:

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


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

Știu că marcajul meu pentru tag este probabil greșit, dar doar testam. Trebuie să înregistrez un hook pentru aceasta.

6
Comentarii

Rarst ai copiat o parte din marcajul paginii când ai ajustat întrebarea, doar te anunț.. ;)

t31os t31os
30 nov. 2010 13:03:22

Nu am fost eu. Așa a fost întrebarea originală. Am încercat doar să clarific titlul (se pare că va fi nevoie de o a doua încercare).

Rarst Rarst
30 nov. 2010 13:10:27

După prefixul funcției, se pare că este ceva construit pe plugin-ul WP e-Commerce?..

Rarst Rarst
30 nov. 2010 13:29:11

@Steve: Problema ta este că nu știi când/cum să apelezi wpsc_product_seo_details()? Ai adăugat-o cumva în meniul tău?

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

Ok, am rezolvat. Pur și simplu am folosit același URL și am adăugat o condiție în funcția care este apelată din meniu. Mulțumesc pentru ajutor.

User User
30 nov. 2010 13:46:18

Ok, uitându-mă la soluția ta, acum sunt complet pierdut. :) Poți, te rog, să redenumești întrebarea ta pentru a descrie mai exact problema și contextul? Ca să beneficieze și alții de asta în viitor.

Rarst Rarst
30 nov. 2010 13:49:24
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 4
3

Nu sunt sigur ce încerci să faci.

Linkurile către administrație pot fi create convenabil cu funcția admin_url(), astfel:

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

Cu ce anume ai probleme?

30 nov. 2010 12:54:31
Comentarii

Când dau click pe link, primesc: Nu aveți permisiuni suficiente pentru a accesa această pagină.

User User
30 nov. 2010 12:57:37

Îmi pare rău, probabil nu mă exprim foarte clar. Am un element de submeniu care, atunci când dai click pe el, afișează o listă de produse. Am un buton de editare lângă fiecare produs și când administratorul apasă pe acel buton, merge la URL-ul menționat mai sus și apelează funcția relevantă (pentru a putea afișa un formular de editare a produsului etc.)

User User
30 nov. 2010 13:01:33

Produsele sunt din punct de vedere tehnic, custom post types? Care este exact link-ul de editare? Încă nu sunt sigur, dar aruncați o privire la edit_post_link() care generează link-uri de editare pentru postări individuale.

Rarst Rarst
30 nov. 2010 13:06:24
1

Aveți probleme cu crearea paginii de administrare?

add_action( 'admin_menu', 'wpse4677_admin_menu' );
function wpse4677_admin_menu()
{
    add_options_page(
        'Titlul paginii WPSE 4677',
        'Titlul elementului de meniu WPSE 4677',
        'manage_options', // Capabilitatea minimă pentru a vizualiza această pagină
        'wpse4677-page-identifier', // Identificator unic
        'wpse4677_page_content' // Funcția de callback pentru a obține conținutul
    );
}

function wpse4677_page_content()
{
    echo '<div class="wrap">';
    echo '<h2>Bine ați venit pe pagina mea!</h2>';
    echo '</div>';
}
30 nov. 2010 12:57:45
Comentarii

Am actualizat blocul de cod în postarea mea originală! - Sper că te ajută, sunt sigur că vei spune "WTF"

User User
30 nov. 2010 13:13:59
6

Doar câteva informații pentru a completa discuția, iar acestea vă pot fi utile mai târziu...

Când sunteți pe o pagină de plugin, sunt setate diverse variabile de administrare, puteți construi un URL de bază din aceste variabile și puteți genera link-uri de acolo, presupunând că doriți ca acestea să indice pagina curentă de plugin...

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

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

*/

Doriți să adăugați propriile variabile de interogare pe acel URL, pur și simplu adăugați-le la variabila creată mai sus folosind add_query_arg...

$edit_link = add_query_arg( 'edit_id', $id, $this_page );
/*
   Doar exemplu, $id ar trebui să vină din codul dumneavoastră
   și $edit_link generat corespunzător pentru fiecare rezultat afișat
*/

Ar trebui să funcționeze cel puțin în teorie, nu am testat codul, dar nu văd niciun motiv pentru care nu ar funcționa... :)

30 nov. 2010 16:54:45
Comentarii

Vreau să menționez că returnarea funcției add page nu va funcționa. Nu este numele paginii, ci un identificator mai complex de ecran care intră în variabila globală $hook_suffix. De asemenea, poți pasa un array asociativ ca prim argument la add_query_arg() în loc să apelezi funcția de mai multe ori.

Rarst Rarst
5 iul. 2011 19:48:53

Nu sunt sigur că te-am înțeles, Rarst, ce anume nu va funcționa? Dacă codul nu face ceea ce trebuia, atunci voi elimina răspunsul (codul care nu funcționează are un scop limitat).

t31os t31os
6 iul. 2011 13:05:52

Mă refeream la partea $my_hook = add_xxxx_page din comentariile codului, $my_hook nu va funcționa ca înlocuitor pentru $plugin_page deoarece sunt lucruri diferite. Codul în sine este corect și funcțional.

Rarst Rarst
6 iul. 2011 13:39:08

Nu am sugerat niciodată că ar fi un înlocuitor, doar că ai putea face referire la $my_hook în locul acelei variabile, deoarece de obicei au aceeași valoare. Nu sunt sigur cum diferă, uită-te la cum este completat $plugin_page (wp-admin/admin.php), apoi uită-te la cum este creată acea valoare din meniu.

t31os t31os
6 iul. 2011 14:24:38

Scuze, nu te urmăresc. Sugerezi că sunt egale sau nu? Ce înseamnă referire în locul variabilei? Rezultatul lui add_*_page() este $page_type . '_page_' . $plugin_name, nu văd cum ar putea ajunge egal cu $plugin_page.

Rarst Rarst
6 iul. 2011 15:54:12

Da, ai dreptate, scuze, început de dimineață, creierul nu era încă pornit pe deplin... lol.. uită comentariile mele anterioare.. ;) Voi elimina acea parte din răspuns.

t31os t31os
6 iul. 2011 16:26:07
Arată celelalte 1 comentarii
1

Rezolvat!

Încercam să complic lucrurile când un simplu condițional ar fi fost suficient în funcția principală apelată din pagină.

function wpsc_display_products_seo(){

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

}
30 nov. 2010 13:47:24
Comentarii

de ce nu ai postat tot codul?

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