如何从编辑帖子页面获得仅附加的图像

时间:2015-03-27 作者:Sabri Şahin Can

最近,我开发了一个带有定制前端的定制wordpress面板。在单篇文章页面中有一个滑块。我将get\\u attached\\u media(“image”)函数的结果显示为滑块的图像。

我告诉编辑,只上传你想在slider中看到的图片,然后从edit post页面上传,从侧菜单的media链接上传其他图片。问题是,如果用户从媒体屏幕上传图像,然后将其插入到帖子的内容中,则该图像恰好附加到该帖子上,因为它没有附加到任何帖子上。

我如何防止这种情况?或者有没有办法显示从编辑帖子页面上传的图像?

2 个回复
SO网友:Fernando Baltazar

我使用此代码加载通过编辑帖子页面上传的所有图像:

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;
}
此外,该行:

$attachment_ids = get_gallery_images();
内容行内部:

echo do_shortcode(\'[gallery columns="4"  include="\'.$attachment_ids.\'"]\'); 
最后一行显示的是gallery中的图像,如果您需要以其他格式(如slider或carousel)显示图像,则应根据您的需要更改这一行。

SO网友:websupporter

下面的代码将提供一个非常基本的接口。想法如下。在编辑页面上,您会看到另一个元框“Slider”,您可以在其中选择滑块应使用的连接媒体。当然,这里可以做更多的用户体验工作。现在,它只显示已连接的介质。因此,编辑器需要添加媒体,保存帖子,然后选择。可以做一些改进。

一旦编辑器为滑块定义了一些附加介质,您就不会使用get_attached_media( \'image\' ) 还有,但是get_attached_slider(). 基本上,该功能还输出Post对象,但仅输出所附媒体的Post对象,该对象应显示在滑块中。

希望,这给你一个开始,你需要什么。

<?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
         **/


        ?>
        <ul>
        <?php foreach( $all_attachments as $s ): ?>
        <li data-attachment="<?php echo $s->ID; ?>">
            <label for="attachment-<?php echo $s->ID; ?>">
                <?php echo wp_get_attachment_image( $s->ID, \'post-thumbnail\' ); ?>
            </label>
            <input id="attachment-<?php echo $s->ID; ?>" type="checkbox" <?php 
                if( in_array( $s->ID, $slider_attachments ) ): 
                    echo \'checked="checked" \'; 
                endif;
            ?>name="slider_attachments[]" value="<?php echo $s->ID; ?>" />
        </li>
        <?php endforeach; ?>
        </ul>
        <?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;
    }
?>
有关如何实现这一点的更多信息:

结束

相关推荐

需要有关GET_POSTS分页的帮助

我一直在wordpress网站上工作,我正试图建立一个页面,让访问者可以看到上传到wordpress媒体库的所有图像,无论这些图像是否附在任何特定的帖子上。查询中的图像将显示,但分页链接不会显示。我可以通过在URL末尾包含第/2页或第/3页来查看分页的页面,但根本没有显示将访问者带到这些页面的分页链接。画廊位于http://www.nickpassaro.com/clientsitedev/NJRI/gallery/上的图像http://www.nickpassaro.com/clientsitedev/