web-dev-qa-db-fra.com

Comment ajouter un champ personnalisé prédéfini sans utiliser de plugin?

J'essaie de trouver un extrait de code pour ajouter un champ personnalisé prédéfini. Est-ce que quelqu'un sait comment ou où je peux trouver cela?

Je sais que je peux le faire avec CustomPress, mais j'essaie de le faire sans plugin.

2
Demilio

Jetez un coup d'œil à l'ajout d'une boîte à méta personnalisée pour tout type de champ de méta prédéfini.

add_meta_box - Docs - WordPress

Vous devrez ajouter un point d'ancrage à l'action 'save_post' afin de sauvegarder également les métadonnées.

Voici une version simple et rapide:

    add_action( 'save_post', 'your_meta_box_save' );

    add_action( 'add_meta_boxes', 'your_meta_box_add' );

function your_meta_box_add(){
        add_meta_box( 'predefined_field', 'Your Predefined Info', 'your_meta_box_html', 'post', 'normal', 'high' );
}

function your_meta_box_save( $post_id ){

    // Bail if we're doing an auto save
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn't there, or we can't verify it, bail
    if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'your_meta_box_nonce' ) ) return;

    // if our current user can't edit this post, bail
    if( !current_user_can( 'edit_post' ) ) return;

    // now we can actually save the data
    $allowed = array( 
        'a' => array( // on allow a tags
            'href' => array() // and those anchords can only have href attribute
        )
    );

    $your_predefined_value = isset($_POST['your_predefined_field']) ? $_POST['your_predefined_field'] : '';

    if( $your_predefined_value )
        update_post_meta($post_id,'your_predefined_field',$your_predefined_value);

}

function your_meta_box_html( $post ){

    wp_nonce_field( 'your_meta_box_nonce', 'meta_box_nonce' );

    //if you know it is not an array, use true as the third parameter
    $your_predefined_value = get_custom_meta($post->ID,'your_predefined_field',true);

    ?>

            <input name="your_predefined_field" id="your_predefined_field" type="text"  value="<?php echo $your_predefined_value; ?>" class="mws-textinput" />
    <?php
}

Cela devrait vous aider à démarrer. commenter si quelque chose ne va pas.

3
Douglas.Sesar
function add_predefined_custom_field_names( $query ) {
    $predefined = array(
        'www.cyberxoft.com'
    );

    global $table_prefix;

    $query = preg_replace('/[\r\n\t]/', ' ', $query); //minify by removing all tabs and line breaks
    $query = preg_replace('/\s+/', ' ', $query); //minify by replacing spaces, tabs and carriages to single space

    //SELECT meta_key FROM wp_postmeta GROUP BY meta_key HAVING meta_key NOT LIKE '\\_%' ORDER BY meta_key LIMIT 30
    $pattern = ("/SELECT meta_key FROM ".$table_prefix."postmeta/i");   

    if( preg_match($pattern, $query) ) {
        $keys = '';     

        foreach($predefined as $key){$keys .= (" UNION SELECT '$key' AS meta_key");}        

        $query = preg_replace('/SELECT/i', 'SELECT meta_key FROM (SELECT', $query);
        $query = preg_replace('/FROM wp_postmeta/i', ('FROM wp_postmeta'.$keys), $query);
        $query = preg_replace('/ GROUP BY/i', ')t GROUP BY', $query);
    }

    return $query;
}
add_filter('query', 'add_predefined_custom_field_names');

Il suffit d’ajouter le code ci-dessus n’importe où dans vos thèmes function.php. Une fois que vous avez ajouté le code ci-dessus, “www.cyberxoft.com” sera ajouté au menu déroulant en tant que l'une des options à sélectionner.

Si vous arrivez à le voir, remplacez simplement "www.cyberxoft.com" par votre nom de champ requis et actualisez la page d'administration. Lorsque vous constatez que cela s'est produit, ajoutez-en autant que vous le souhaitez MAIS souvenez-vous que 30 seulement pourraient l'être considéré comme une limite par défaut.

Prendre plaisir...

Vous pouvez également trouver cette solution sur Ajouter par programme des options pour "ajouter un nouveau" champ déroulant personnalisé

0
CyberXoft