it-swarm.com.de

Laden Sie ein Skript, um einen benutzerdefinierten Beitrag in admin einzugeben

Ich habe einen benutzerdefinierten Beitragstyp "Portfolio" erstellt, der ungefähr so ​​aussieht:

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    //'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 4,
    'taxonomies' => array('post_tag','category'),
    'supports' => array('title','editor','comments','trackbacks','revisions','custom-fields','page-attributes','thumbnail', 'excerpt', 'tags')
  ); 

register_post_type( 'portfolio' , $args );

Und ich habe einige andere benutzerdefinierte Felder mit einer Aktion:

add_action("admin_init", "admin_init");
function admin_init(){ // add_meta_box( $id, $title, $callback, $page, $context, $priority ); 
  add_meta_box("media", "Media Type", "media", "portfolio", "side", "high");
  add_meta_box("map_meta", "Mapping Info", "map_meta", "portfolio", "normal", "high");
}

Obwohl ich dies einmal funktionierte, kann ich nicht herausfinden, dass es Skripte nur für diese Seite lädt. Im Moment habe ich sie nur mit dem Rest des wp_enqueue_script wie folgt verbunden:

function my_init() {
    if (!is_admin()) {
                       ....
        }

 if (is_admin()) {
        wp_register_script('Gmaps', 'http://maps.google.com/maps/api/js?sensor=false', false, '3.0', false);
        wp_enqueue_script('Gmaps');


        wp_register_style('admin_js', get_bloginfo('template_directory') . '/admin.js');
        wp_enqueue_script('admin_js');

        wp_register_script('Zmaps', get_bloginfo('template_directory') .'/scripts/maps.js', array('Gmaps'), '1.0', true);
        wp_enqueue_script('Zmaps');
        }
           }
add_action('wp_enqueue_scripts', 'my_init');

Aber nichts davon wird für mich geladen. Wie kann ich diese Skripte in die Admin-Seiten laden? Besser noch, wie kann ich sie speziell für die Bearbeitungsseiten des benutzerdefinierten Beitragstyps Portfolio laden?

17
zac

Verwenden Sie diesen Code, um Skripts zu den Bearbeitungsseiten Ihres benutzerdefinierten Beitragstyps für das Portfolio hinzuzufügen.

add_action( 'admin_print_scripts-post-new.php', 'portfolio_admin_script', 11 );
add_action( 'admin_print_scripts-post.php', 'portfolio_admin_script', 11 );

function portfolio_admin_script() {
    global $post_type;
    if( 'portfolio' == $post_type )
    wp_enqueue_script( 'portfolio-admin-script', get_stylesheet_directory_uri() . '/admin.js' );
}
29
Joshua Abenazer

Ich poste eine bessere Lösung, da die akzeptierte Antwort alt ist und nicht die richtigen Haken verwendet .

Zuallererst: Um Skripte und Stile im Admin-Bereich in die Warteschlange zu stellen, muss admin_enqueue_scripts und nichts anderes verwendet werden.

Zweitens: Vergessen Sie alle globalen Variablen. Verwenden Sie das aktuelle Bildschirmobjekt, um verschiedene Überprüfungen durchzuführen.

Hier ist ein fertiger Code zum Kopieren und Einfügen:

<?php 
function wpse_cpt_enqueue( $hook_suffix ){
    $cpt = 'portfolio';

    if( in_array($hook_suffix, array('post.php', 'post-new.php') ) ){
        $screen = get_current_screen();

        if( is_object( $screen ) && $cpt == $screen->post_type ){

            // Register, enqueue scripts and styles here

        }
    }
}

add_action( 'admin_enqueue_scripts', 'wpse_cpt_enqueue');

Hinweis: Ersetzen Sie 'portfolio' durch den benötigten Pfostentyp slug.

18
Andrei Surdu
// Enter custom JS TO ADMIN AREA

add_action( 'admin_print_scripts-post-new.php', 'banner_admin_script', 11 );
add_action( 'admin_print_scripts-post.php', 'banner_admin_script', 11 );

function banner_admin_script() {
    global $post_type;
    if ( $post_type == 'banner' )
        wp_enqueue_script( 'portfolio-admin-script', plugins_url( '/js/admin.js', 
            __FILE__), '', '', true ); // "TRUE" - ADDS JS TO FOOTER
}

Ich habe einige Änderungen an diesem Code vorgenommen, um für mich zu funktionieren:

  1. Ich habe get_stylesheet_directory_uri() . '/admin.js' in plugins_url( '/js/admin.js', __FILE__), geändert - dies wurde benötigt, weil ich ein Plugin für ein Banner entwickelt habe. Dies ist die bessere Lösung, anstatt CPT in functions.php zu erstellen.

  2. Ich habe "true" hinzugefügt, um den Code im Fußzeilenbereich anstatt im Kopfbereich zu senden - dies verkürzt die Ladezeit

1
Anna