Cum să creezi și să faci legătura către pagina de administrare pentru un plugin
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.

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?

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

Î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.)

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.

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

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... :)

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.

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).

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.

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.

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
.
