Wie man Bilder nur von der Post-Seite bearbeiten bekommt

Ich habe kürzlich ein benutzerdefiniertes WordPress-Panel mit einem benutzerdefinierten Front-End entwickelt. In einzelnen Post-Seiten gibt es einen Schieberegler. Ich zeige das Ergebnis der function get_attached_media (‘image’) als Bilder des Sliders an.

Ich sagte Redakteur, dass nur die Bilder hochzuladen, die Sie gerne in Slider sehen würden, um Post von der Post-Seite zu posten, laden Sie andere Bilder von der Medien-Verbindung auf dem seitlichen Menü hoch. Das Problem besteht darin, dass, wenn der Benutzer ein Bild vom Medienbildschirm hochlädt und es dann in den Inhalt des Beitrags einfügt, das Bild zufällig an diesen Beitrag angehängt wird, da es keinem Post angehängt ist.

Wie kann ich das verhindern? Oder gibt es eine Möglichkeit, Bilder anzuzeigen, die von der Bearbeitungsseite hochgeladen wurden?

Solutions Collecting From Web of "Wie man Bilder nur von der Post-Seite bearbeiten bekommt"

Ich verwende diesen Code, um alle Bilder zu laden, die ich über die Post-Seite hochgeladen habe:

function get_gallery_images(){ global $wpdb,$post; $ids = ""; $counter = 0; $number_of_posts = 12; $args = array( 'post_type' => 'attachment', 'numberposts' => 12, 'post_status' => null, 'orderby' => 'rand', 'post_parent' => $post->ID ); $attachments = get_posts($args); if ($attachments) { foreach ($attachments as $attachment) { if ($counter != 0) { $ids .= ','.$attachment->ID; } else { $ids .= $attachment->ID; } $counter++; } } return $ids; } 

Auch diese Zeile:

 $attachment_ids = get_gallery_images(); 

Und diese inneren Inhaltslinien:

 echo do_shortcode('[gallery columns="4" include="'.$attachment_ids.'"]'); 

Diese letzte Zeile zeigt an, dass die Bilder Galerie sind, wenn Sie sie in einem anderen Format wie Slider oder Karussell zeigen müssen, sollte diese Zeile entsprechend Ihren Bedürfnissen geändert werden.

Der folgende Code würde eine sehr grundlegende Schnittstelle bereitstellen. Die Idee ist folgende. Auf der Bearbeitungsseite erhalten Sie eine weitere Metabox “Slider”, in der Sie auswählen können, welche angeschlossenen Medien für den Slider verwendet werden sollen. Hier könnte natürlich mehr UX-Arbeit geleistet werden. Im Moment werden nur die bereits angeschlossenen Medien angezeigt. Also muss der Editor das Medium hinzufügen, den Post speichern und dann auswählen. Es könnte einige Verbesserungen geben.

Sobald der Editor einige angehängte Medien für den Slider definiert hat, werden Sie get_attached_media( 'image' ) nicht mehr verwenden, sondern get_attached_slider() . Grundsätzlich gibt diese function auch Post-Objekte aus, aber nur die angehängten Medien, die im Slider angezeigt werden sollen.

Hoffe, das gibt dir einen Anfang für das, was du brauchst.

 < ?php add_action( 'add_meta_boxes', 'slider_metabox' ); function slider_metabox(){ add_meta_box( 'slider-metabox', __( 'Slider Pictures', 'sl' ), 'slider_metabox_render', 'post' //Use 'post' to display on Posts, 'page' to display on Pages ); } /** * This function renders the Metabox **/ function slider_metabox_render( $post ){ $slider_attachments = get_post_meta( $post->ID, 'slider_attachments', true ); $all_attachments = get_attached_media( 'image', $post->ID ); if( empty( $slider_attachments ) ) $slider_attachments = array(); /* * We get our attached media and the media, which is already supposed * to be in the slider. We loop through all the attached media * output a checkbox and if the single media is * already for the slider, we check the checkbox **/ ?> 
    < ?php foreach( $all_attachments as $s ): ?>
  • ID, $slider_attachments ) ): echo 'checked="checked" '; endif; ?>name="slider_attachments[]" value="< ?php echo $s->ID; ?>" />
  • < ?php endforeach; ?>
< ?php } /** * Lets save our slider media **/ add_action( 'save_post', 'slider_attachment_save' ); function slider_attachment_save( $post_id ){ if ( wp_is_post_revision( $post_id ) ) return; if( isset( $_POST['slider_attachments'] ) ) update_post_meta( $post_id, 'slider_attachments', $_POST['slider_attachments'] ); } /** * get_attached_slider * Use this instead of get_attached_media() to retrieve only the slider images **/ function get_attached_slider( $post_id = null ){ if( $post_id == null ) $post_id = get_the_ID(); if( !is_numeric( $post_id ) ){ $error = new WP_Error(); $error->add( 'post-id', 'No valid post ID' ); return $error; } $attachment_ids = get_post_meta( $post_id, 'slider_attachments', true ); if( empty( $attachment_ids ) || ! is_array( $attachment_ids ) ) return false; $args = array( 'post_type' => 'attachment', 'post__in' => $attachment_ids, 'post_status' => 'any', 'posts_per_page' => count( $attachment_ids ) ); $query = new WP_Query( $args ); $attachments = $query->posts; return $attachments; } ?>

Weitere Informationen zur Realisierung:

  • add_meta_box ()
  • save_post
  • WP_Query
  • update_post_meta ()
  • get_post_meta ()