3

Wordpress 3.5 にアップデートしたところ、コードの一部がクラッシュしました。AJAX 経由で特定の投稿をそのギャラリーと共にロードする php ファイルがあります。

コードは次のようになります。

<?php

// Include WordPress
define('WP_USE_THEMES', false);
require('../../../../wp-load.php');

$id = $_POST['id'];

// query post with this identifier
query_posts('meta_key=identifier&meta_value='.$id); 
if (have_posts()) :
while (have_posts()) : the_post();

    // add content
    $content = apply_filters('the_content', get_the_content()); 
    echo '<div class="content-inner">'.$content.'</div>';
endwhile;
endif;
?>

投稿には [gallery] ショートコードが含まれています。このコードを使用して、独自の Wordpress ギャラリーを構築しました。

remove_shortcode('gallery');
add_shortcode('gallery', 'parse_gallery_shortcode');

function parse_gallery_shortcode($atts) {

    global $post;

    extract(shortcode_atts(array(
        'orderby' => 'menu_order ASC, ID ASC',
        'id' => $post->ID,
        'itemtag' => 'dl',
        'icontag' => 'dt',
        'captiontag' => 'dd',
        'columns' => 3,
        'size' => 'full',
        'link' => 'file'
    ), $atts));

    $args = array(
        'post_type' => 'attachment',
        'post_parent' => $id,
        'numberposts' => -1,
        'orderby' => $orderby
        ); 

    $images = get_posts($args);
    print_r($images);
}

これは、私のサイトの他のすべてのギャラリーで機能しますが、ajax をロードしたギャラリーでは機能しません。また、Wordpress 3.4 で動作しました。

私が見落としている Wordpress 3.5 の変更点はありますか?

4

2 に答える 2

2

私はそれを理解しました:すでにメディアライブラリにアップロードされている画像を含むギャラリーを使用する場合、ギャラリーのショートコードは次のよう[gallery ids=1,2,3]になります。つまり、画像はギャラリーにリンクされているだけで(添付されていない)、post_type=attachment機能しません。 .

現在、正規表現を使用してイメージ ID を取得しています。

$post_content = $post->post_content;
preg_match('/\[gallery.*ids=.(.*).\]/', $post_content, $ids);
$array_id = explode(",", $ids[1]);
于 2013-01-14T10:46:22.027 に答える
1

とを使用して、すべてのギャラリーまたは 1 つのギャラリーをプルできるように$post->IDなりget_post_galleries()ました。各ギャラリーには、 の画像 ID リストidsと の画像 URLのリストが含まれsrcます。gallery オブジェクトは基本的にショートコード引数なので、それらにもアクセスできます。

if ( $galleries = get_post_galleries( $post->ID, false ) ) {

    $defaults = array (
        'orderby'    => 'menu_order ASC, ID ASC',
        'id'         => $post->ID,
        'itemtag'    => 'dl',
        'icontag'    => 'dt',
        'captiontag' => 'dd',
        'columns'    => 3,
        'size'       => 'full',
        'link'       => 'file',
        'ids'        => "",
        'src'        => array (),
    );

    foreach ( $galleries as $gallery ) {

        // defaults
        $args = wp_parse_args( $gallery, $defaults );

        // image ids
        $args[ 'ids' ] = explode( ',', $args[ 'ids' ] );

        // image urls
        $images = $args[ 'src' ];
    }
}
于 2016-02-02T02:44:00.430 に答える