it-swarm.com.de

So fügen Sie eine Metabox für Posts einer bestimmten Kategorie hinzu

Ich möchte Metabox für die Posts der Kategorie = 18 hinzufügen und verwende den folgenden Code, kann dies jedoch nicht. Also bitte hilf mir raus->

 add_action('admin_init','my_meta_init');

function my_meta_init()
{
    $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;

    // checks for post/page ID
    if ($post_id->post_category[0] == 18)
    {
        add_meta_box('team_meta', 'My Custom Meta Box 1', 'team_meta_1', 'post', 'normal', 'high');


    function team_meta_1(){
    global $post;
    // Noncename needed to verify where the data originated
    echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' . 
    wp_create_nonce( plugin_basename(__FILE__) ) . '" />';

    // Get the location data if its already been entered
    $designation = get_post_meta($post->ID, '_designation', true);

    // Echo out the field
    // echo '<input type="text" name="_description" value="' . $description  . '" />';
    echo '<textarea name=_designation rows="6" cols="100">'.$designation.'</textarea>';

    }

    function my_meta_save($post_id, $post) {

    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) {
    return $post->ID;
    }

    // Is the user allowed to edit the post or page?
    if ( !current_user_can( 'edit_post', $post->ID ))
        return $post->ID;

    // OK, we're authenticated: we need to find and save the data
    // We'll put it into an array to make it easier to loop though.

    $events_meta['_designation'] = $_POST['_designation'];


    // Add values of $events_meta as custom fields

    foreach ($events_meta as $key => $value) { // Cycle through the $events_meta array!
        if( $post->post_type == 'revision' ) return; // Don't store custom data twice
        $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
        if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
            update_post_meta($post->ID, $key, $value);
        } else { // If the custom field doesn't have a value
            add_post_meta($post->ID, $key, $value);
        }
        if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
    }

}

 add_action('save_post','my_meta_save');
}


}
4
terminator

Anstelle von if ($post_id->post_category[0] == 18) versuchen

if ( $post_id && in_category( 18, $post_id ) )

Auch die 'save_post' Aktion sollte sein

 add_action('save_post','my_meta_save', 10, 2);

Wenn Sie möchten, dass die Metabox bei Auswahl der Kategorie in einem neuen Beitrag angezeigt wird, entfernen Sie die äußere Kategorietest if-Anweisung, damit die Metabox immer hinzugefügt wird, und blenden Sie sie dann mit jquery ein/aus (setzen Sie dies nach dem Echo des Textbereichs).

echo '<textarea name=_designation rows="6" cols="100">'.$designation.'</textarea>';
?>
<script type="text/javascript">
jQuery(document).ready(function() {
    (function ($) {
        $('#in-category-18').change(function () { $('#team_meta').toggle(this.checked); }).change();
    })(jQuery);
});
</script>
<?php
4
bonger