Utilizarea do_shortcode() în cadrul unei Pagini de Administrare

12 aug. 2012, 00:26:44
Vizualizări: 13.6K
Voturi: 15

Folosesc câteva plugin-uri care au shortcode-uri... însă, în loc să creez o pagină publică pentru conținut, am creat câteva pagini noi în administrare folosind add_menu_page și trebuie să aflu cum să utilizez do_shortcode() în acest context.

În stadiul actual, funcția doar afișează șirul de caractere. Presupun că aceasta se întâmplă deoarece API-ul pentru shortcode-uri nu este disponibil într-o pagină de administrare.

Cum pot rezolva această problemă? Nu găsesc nicio documentație care să explice cum să utilizez shortcode-uri în cadrul WP Admin... sau dacă acest lucru este chiar posibil.


Mai exact, încerc să utilizez shortcode-uri WooCommerce în cadrul WP Admin. Nu-mi place faptul că plugin-urile nu folosesc interfața de administrare WordPress pentru gestionarea conturilor/utilizatorilor.

5
Comentarii

Cine a trecut pe aici și a decis că "nu am făcut nicio cercetare" și mi-a dat un scor negativ fără să comenteze este extrem de neajutorător.

dcolumbus dcolumbus
12 aug. 2012 00:39:34

Presupun că ai putea spune că shortcode-urile sunt pentru conținutul din front-end... Încerci să folosești un alt plugin pentru a genera conținut pentru pagina ta de administrare a pluginului?

Damien Damien
12 aug. 2012 00:56:09

@dcolumbus Sunt de acord. Am văzut câteva voturi în jos nejustificate recent, cu siguranță mai multe decât îmi amintesc să fi văzut în trecut. IMHO, aceasta este o întrebare sinceră (și destul de grozavă), așa că încerc acum să ofer un răspuns ;)

TheDeadMedic TheDeadMedic
12 aug. 2012 01:39:05

Dacă ai creat o pagină de administrare, atunci poți specifica rezultatul - de ce ai nevoie/dorești să folosești do_shortcode(). Poți oferi un exemplu?

Stephen Harris Stephen Harris
12 aug. 2012 01:53:12

În special încerc să utilizez shortcode-urile WooCommerce. Pagini de gestionare a utilizatorilor și pagini de gestionare a conturilor.

dcolumbus dcolumbus
12 aug. 2012 22:35:05
Toate răspunsurile la întrebare 2
3
10

În loc să apelezi do_shortcode(), apelează direct funcția asociată shortcode-ului.

Exemplu

Există un shortcode numit [example] și o funcție înregistrată ca handler pentru shortcode:

function example_shortcode( $atts = array(), $content = '' )
{
    extract( 
            shortcode_atts( 
            array (
            'before' => '',
            'after' => '',
            ), 
            $atts 
       )
   );

    return $before . $content . $after;
}
add_shortcode( 'example', 'example_shortcode' );

În pagina de administrare apelezi direct funcția:

echo example_shortcode( 
    array ( 'before' => 'This ', 'after' => '!' ), 
    'works' 
);

Rezultat: This works!.

Mai rapid și mai sigur decât do_shortcode().

12 aug. 2012 02:01:04
Comentarii

Nici nu mă gândisem la asta! Pe de altă parte, nu folosisem niciodată shortcode-uri în admin (din orice motiv) și am avut o scuză să investighez ;)

TheDeadMedic TheDeadMedic
12 aug. 2012 02:15:00

Nu am nicio idee de ce nici eu nu m-am gândit la asta... O să încerc și revin cu rezultate!

dcolumbus dcolumbus
12 aug. 2012 22:35:38

Un dezavantaj al acestei abordări este că va înceta să funcționeze dacă autorul plugin-ului refactorizează funcția callback a shortcode-ului în viitor. Modificările aduse shortcode-ului în sine vor fi probabil compatibile cu versiunile anterioare, dar este mai puțin probabil ca numele funcțiilor interne ale plugin-ului să rămână aceleași.

Ian Dunn Ian Dunn
15 sept. 2012 12:49:50
1

Se pare că API-ul pentru shortcode-uri este disponibil în administrare, dar rezultatul său va depinde de tag-ul shortcode în cauză.

Shortcode-ul încorporat [caption] funcționează conform așteptărilor, în timp ce [embed] nu (acest lucru se datorează modului în care API-ul de embed-uri "încarcă leneș" shortcode-ul și depinde de filtrul the_content pentru a rula, deci tehnic nu este vina API-ului de shortcode-uri).

Concluzie: Depinde în totalitate de cum și când este înregistrat tag-ul, precum și de ce face/presupune atunci când este executat.

@dcolumbus Despre care tag este vorba în cazul tău?

12 aug. 2012 01:47:59
Comentarii

De asemenea, unele etichete se vor aștepta ca get_the_ID() să returneze un ID de postare.

Stephen Harris Stephen Harris
12 aug. 2012 01:52:09