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

18

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 dieses mal hatte, kann ich nicht herausfinden, um es zu erhalten, um Indexe gerade für diese Seite zu laden. Im Moment habe ich sie nur mit dem Rest von wp_enqueue_scriptso zusammen:

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?

zac
quelle
2
Zu Ihrer Information: Warteschlangen sollten nicht am Anfang stattfinden. (Viele Leute tun es, aber es ist nicht der richtige Ort für eine Warteschlange.)
31.

Antworten:

32

Verwenden Sie diesen Code, um Skripts zu den Bearbeitungsseiten Ihres benutzerdefinierten Post-Typs 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' );
}
Joshua Abenazer
quelle
1
nicht mehr genau. @Smartik Antwort ist jetzt korrekter Ansatz.
Yaron
25

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

Zuallererst: Zum Einreihen von Skripten und Stilen in den Admin-Bereich muss admin_enqueue_scriptsnichts 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'den Stift durch den erforderlichen Stifttyp.

Andrei Surdu
quelle
1
// 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 wechselte get_stylesheet_directory_uri() . '/admin.js'zu plugins_url( '/js/admin.js', __FILE__),- dies wurde benötigt, weil ich ein Plugin für ein Banner entwickelt habe. Dies ist die bessere Lösung, anstatt CPT im Inneren zu erstellenfunctions.php

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

Anna
quelle