¿Cómo crear y vincular a la página de administración de un complemento?

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

?>

ANTIGUA POST

Hola chicos,

Actualmente estoy escribiendo un complemento para mi cliente en WordPress. El problema que tengo es que cuando un usuario hace clic en editar para cambiar un registro, no estoy seguro de cómo crear el enlace de administrador para hacerlo.

es decir

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

Sé que mi marcado para la etiqueta probablemente sea incorrecto, pero solo estaba probando. ¿Necesito registrar un gancho para hacer esto?


fuente
En primer lugar, copió parte del marcado de la página cuando ajustó la pregunta, solo para
avisarle
No fui yo. Así de original era la pregunta. Solo traté de aclarar el título (que parece requerirá tomar dos).
Rarst
Por el prefijo función de esto parece algo construido en lo alto de WP e-Commerce Plugin ..?
Rarst
@ Steve: ¿Es tu problema que no sabes cuándo / cómo llamar wpsc_product_seo_details()? ¿Lo agregaste a tu menú de alguna manera?
Jan Fabry
2
Ok, mirando tu solución, estoy completamente perdido ahora. :) ¿Podría cambiar el nombre de su pregunta para describir con precisión el problema y el contexto? Para que otros puedan beneficiarse de esto en el futuro.
Rarst

Respuestas:

6

No estoy seguro de lo que estás tratando de hacer.

Los enlaces de administrador se pueden crear convenientemente con la admin_url()función, como esta:

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

¿Con qué tienes problemas exactamente?

Rarst
fuente
Cuando hago clic en el enlace, aparece: No tiene permisos suficientes para acceder a esta página.
Lo siento, probablemente no estoy explicando esto muy bien. Tengo un elemento de submenú que, cuando hace clic en él, obtiene una lista de productos. Tengo un botón de edición al lado de cada producto y cuando el administrador hace clic en ese botón, va a la url de arriba y llama a la función correspondiente (para que pueda hacer un formulario de edición de producto, etc.)
¿Qué productos son, técnicamente, tipos de publicación personalizados? ¿Qué es exactamente el enlace de edición? Todavía no estoy seguro, pero mira edit_post_link()qué genera enlaces de edición para publicaciones individuales.
Rarst
4

¿Tienes problemas para crear la página de administración ?

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
fuente
¡He actualizado el bloque de código en mi publicación original! - Espero que esto ayude, estoy seguro de que vas a decir "WTF"
3

Solo alguna información para etiquetar en la discusión, y esto puede ser útil para usted más tarde.

Cuando está en una página de complementos, se establecen varias variables de administración, puede crear una URL base a partir de esas variables y generar enlaces desde allí, suponiendo que desee que apunten a la página del complemento actual.

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

*/

Desea agregar sus propios vars de consulta en esa URL, simplemente agréguelos a la variable creada anteriormente 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
*/

Debería funcionar en teoría al menos, no probé el código, pero no veo ninguna razón para que no funcione ... :)

t31os
fuente
Quiero señalar que el retorno de la función de agregar página no funcionará. No es el nombre de la página, es un identificador de pantalla más complejo que entra en $hook_suffixglobal. También puede pasar una matriz asociativa de cosas como primer argumento en add_query_arg()lugar de llamar varias veces.
Rarst
No estoy seguro de seguir a Rarst, ¿qué es exactamente lo que no funcionará? Si el código no hace lo que estaba destinado a hacer, entonces eliminaré la respuesta (el código que no funciona tiene poco propósito).
t31os
Me refería a esta parte $my_hook = add_xxxx_pageen los comentarios de código, $my_hookno funcionará como reemplazo $plugin_pageporque son cosas diferentes. El código en sí es sólido y funciona.
Rarst
Nunca lo sugerí como un reemplazo, solo que podría referirse $my_hooken lugar de esa var, porque generalmente tienen el mismo valor. No estoy seguro de cómo son diferentes, eche un vistazo a cómo $plugin_pagese llena (wp-admin / admin.php), luego eche un vistazo a cómo se crea ese valor de menú.
t31os
1
Sí, tienes razón, perdón, comienzo temprano, el cerebro aún no se ha iniciado ... jajaja ... olvida mis comentarios anteriores ...;) Eliminaré esa parte de la respuesta.
t31os
2

¡Resuelto!

Intenta complicar demasiado las cosas cuando un simple condicional hubiera hecho el truco en la función principal llamada desde la página.

function wpsc_display_products_seo(){

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

}

fuente
¿Por qué no publicaste todo el código?
Francisco Corrales Morales