Sélectionner une page


Si vous avez déjà utilisé WordPress pour créer un site Web pour vous-même ou un client, ou si vous travaillez pour une entreprise dont le site Web est alimenté par WordPress, vous auriez vu et utilisé des méta-boîtes.

Dans le passé, nous avons couvert Ajouter des méta-boîtes personnalisées à WordPress. Dans cet article, nous allons aller plus loin deux étapes pour expliquer leur relation et leur intégration avec les types de publications, notamment en utilisant les données stockées dans une méta-boîte dans le front-end WordPress.

Ajout de méta-boîtes à l’écran Types de publication

La plupart (sinon la totalité) des fonctions PHP, leurs paramètres et Action Crochets utiles La création de méta-boîtes a été couverte par Narayan Prusty.

Pour ajouter un champ méta à l’écran d’édition pour n’importe quel type de publication, cliquez sur add_meta_box() est utilisé puis connecté au add_meta_boxes Action.

Le code suivant ajoute une métabox à la métabox post Écran d’édition. Prendre note global_notice_meta_box_callback, la fonction appelée pour afficher les champs de formulaire dans le champ méta. Nous reviendrons à ceci plus tard.

function global_notice_meta_box() {

    add_meta_box(
        'global-notice',
        __( 'Global Notice', 'sitepoint' ),
        'global_notice_meta_box_callback',
        'post'
    );
}

add_action( 'add_meta_boxes', 'global_notice_meta_box' );

Pour ajouter un champ méta à une série d’écrans de type de publication: post, page et un book type de publication personnalisé; Créez un tableau des types de publication, parcourez le tableau et utilisez-le add_meta_box() pour leur ajouter la méta-boîte.

function global_notice_meta_box() {

    $screens = array( 'post', 'page', 'book' );

    foreach ( $screens as $screen ) {
        add_meta_box(
            'global-notice',
            __( 'Global Notice', 'sitepoint' ),
            'global_notice_meta_box_callback',
            $screen
        );
    }
}

add_action( 'add_meta_boxes', 'global_notice_meta_box' );

Utilisez cette option pour ajouter un champ méta à tous les types de publication existants et à ceux à créer ultérieurement get_post_types() pour obtenir un tableau des types de publication, puis remplacer la valeur de $screen avec elle.

function global_notice_meta_box() {

    $screens = get_post_types();

    foreach ( $screens as $screen ) {
        add_meta_box(
            'global-notice',
            __( 'Global Notice', 'sitepoint' ),
            'global_notice_meta_box_callback',
            $screen
        );
    }
}

add_action( 'add_meta_boxes', 'global_notice_meta_box' );

L’ajout d’une méta-boîte à tous les types de publication existants et nouveaux peut également être effectué en omettant le troisième ($screen) Argument comme suit:

function global_notice_meta_box() {

    add_meta_box(
        'global-notice',
        __( 'Global Notice', 'sitepoint' ),
        'global_notice_meta_box_callback'
    );

}

add_action( 'add_meta_boxes', 'global_notice_meta_box' );

Une méta-boîte peut également être limitée à un type de publication (book dans cet exemple) en ajoutant le nom du type de publication add_meta_boxes Crochet d’action comme suit:

function global_notice_meta_box() {

    add_meta_box(
        'global-notice',
        __( 'Global Notice', 'sitepoint' ),
        'global_notice_meta_box_callback'
    );

}

add_action( 'add_meta_boxes_book', 'global_notice_meta_box' );

Parmi les arguments de tableau de register_post_type() Pour personnaliser un type de publication personnalisé, c’est register_meta_box_cb Sa valeur est une fonction de rappel qui est appelée lorsque les méta-boîtes sont configurées.

Supposons que nous en ayons fait un book Type de publication personnalisé avec le code suivant:

function book_cpt() {

    $args = array(
        'label'                => 'Books',
        'public'               => true,
        'register_meta_box_cb' => 'global_notice_meta_box'
    );

    register_post_type( 'book', $args );
}

add_action( 'init', 'book_cpt' );

Ajout du add_meta_box() Définition de fonction pour créer une méta-boîte dans un global_notice_meta_box Fonction PHP (valeur de register_meta_box_cb ci-dessus) ajoute le champ méta au book Écran d’édition pour les types d’articles personnalisés.

Et voici encore notre exemple global_notice_meta_box Une fonction.

function global_notice_meta_box() {

    add_meta_box(
        'global-notice',
        __( 'Global Notice', 'sitepoint' ),
        'global_notice_meta_box_callback'
    );

}

Jusqu’à présent, nous avons vu les différentes façons d’enregistrer ou d’ajouter des méta-boîtes à WordPress. Nous devons encore le faire global_notice_meta_box_callback Fonction qui contient le champ de formulaire de notre méta-boîte.

Ci-dessous le code pour cela global_notice_meta_box_callback Fonction qui insère un champ de zone de texte dans le champ méta.

function global_notice_meta_box_callback( $post ) {

    // Add a nonce field so we can check for it later.
    wp_nonce_field( 'global_notice_nonce', 'global_notice_nonce' );

    $value = get_post_meta( $post->ID, '_global_notice', true );

    echo '<textarea style="width:100%" id="global_notice" name="global_notice">' . esc_attr( $value ) . '</textarea>';
}

Champ Meta pour la zone de texte

le save_post Avec la coche d’action, les données saisies dans la zone de texte sont enregistrées lorsque le message est enregistré en tant que brouillon ou publié.

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id
 */
function save_global_notice_meta_box_data( $post_id ) {

    // Check if our nonce is set.
    if ( ! isset( $_POST['global_notice_nonce'] ) ) {
        return;
    }

    // Verify that the nonce is valid.
    if ( ! wp_verify_nonce( $_POST['global_notice_nonce'], 'global_notice_nonce' ) ) {
        return;
    }

    // If this is an autosave, our form has not been submitted, so we don't want to do anything.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Check the user's permissions.
    if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {

        if ( ! current_user_can( 'edit_page', $post_id ) ) {
            return;
        }

    }
    else {

        if ( ! current_user_can( 'edit_post', $post_id ) ) {
            return;
        }
    }

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['global_notice'] ) ) {
        return;
    }

    // Sanitize user input.
    $my_data = sanitize_text_field( $_POST['global_notice'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_global_notice', $my_data );
}

add_action( 'save_post', 'save_global_notice_meta_box_data' );

Pour utiliser les données à saisir dans la zone de texte du champ méta, les données sont affichées avant l’affichage du contenu de l’article pour lequel elles ont été enregistrées.

function global_notice_before_post( $content ) {

    global $post;

    // retrieve the global notice for the current post
    $global_notice = esc_attr( get_post_meta( $post->ID, '_global_notice', true ) );

    $notice = "<div class="sp_global_notice">$global_notice</div>";

    return $notice . $content;

}

add_filter( 'the_content', 'global_notice_before_post' );

Explication du code

D’abord nous en avons fait un global_notice_before_post Fonction intégrée dans the_content Filtrer avec un $content Paramètre qui contient le contenu de la publication.

Dans la fonction, nous incluons le global $post Variable contenant le WP_Post Objet de la publication actuelle qui est affichée.

La notification globale enregistrée pour une publication spécifique est extraite de get_post_meta et enregistré dans $global_notice Variable.

Le message est ensuite emballé dans un div et enregistré dans le $notice Variable.

Et enfin, $notice qui contient l’annonce globale est concaténée avec $content Quel est le contenu réel du message.

Vous trouverez ci-dessous une capture d’écran d’un article avec l’avis global devant le contenu de l’article.

Démo Global Notice

Résumé

Dans ce didacticiel, nous avons découvert un certain nombre de façons d’enregistrer des méta-boîtes dans les écrans d’administration WordPress et de les limiter aux types de publication.

Nous avons également examiné comment ajouter des champs de formulaire à une méta-boîte et comment enregistrer les données saisies lors de l’enregistrement ou de la publication d’un article.

Enfin, nous avons expliqué comment les données saisies dans une meta box peuvent être mises en pratique.

Un prochain article expliquera comment ajouter un onglet d’aide contextuelle aux écrans d’administration du type de publication.

Si vous avez des questions ou des contributions, nous serions ravis de les entendre dans les commentaires.



Source link

Recent Posts