0

特定のメニューを持つすべてのページをリストし、タイトルと「高度なカスタム フィールド」で生成されたカスタム フィールド イメージをロードするメニューを持つサイトで作業しています。タイトルは表示できますが、イメージを表示しようとすると、現在のページのカスタム フィールド イメージをすべてのメニュー リンクに表示します

これが例です " http://appelhat.dk/bordplader/ " マウスがページのボタンに触れると、メニューが上に移動します。

ここにコードがあります

<nav id="main-navigation">
        <ul>
            <?php 
                $template = 'gallery.php';
                $Pages = $wpdb->get_col("SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_wp_page_template' AND meta_value = '$template'");
                foreach($Pages as $Page) {
                    $exclude_Pages .= $Page . ',';
                }
                $pages = get_pages("include=$exclude_Pages"); 

            foreach ( $pages as $page ): 

                $title = $page->post_title
                ?>
                <li>
                    <a href="<?php echo get_page_link( $page->ID ); ?>">
                        <span class="title"><?php echo $title ?></span>
                    <?php 
                        $attachment_id = get_field('front_billede');
                        $size = "thumbnail"; 
                        $image = wp_get_attachment_image_src( $attachment_id, $size );
                    ?>
                    <img src="<?php echo $image[0]; ?>" />
                    </a>
                </li>
            <?php endforeach; ?>   
        </ul>
    </nav>

ありがとう

4

2 に答える 2

1

おそらく、get_fieldではなく get_post_meta を使用してみてください。get_field が目的の $page->ID ではなく、グローバルな $post->ID を呼び出しているようです。

$attachment_id = get_post_meta($page->ID, 'front_billede', true);

または、すべてのタグが適切な ID を使用していることを確認するためにWP_Queryまたはget_postsを使用して、2 番目のループを作成することもできます。

于 2013-02-09T22:15:43.773 に答える
0

これは比較的古い質問ですが、このコンテキストで get_field を使用したい場合は、単純にオーバーロードされたメソッドを使用できます。

$attachment_id = get_field('front_billede', $page->ID);

さらに、Wordpress でこのようなカスタム メニューを作成する場合は、カスタム Walker をお勧めします。これは私が以前に使用した例です:

class WP_Image_Walker extends Walker_Page {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<ul class='children list-inline'>\n";
    }

    function start_el( &$output, $page, $depth = 0, $args = array(), $current_page = 0 )
    {
        if ( $depth ) {
            $indent = str_repeat("\t", $depth);
        }
        else {
            $indent = '';
        }

        extract($args, EXTR_SKIP);
        $css_class = array('page_item', 'page-item-'.$page->ID);

        if ( !empty($current_page) ) {
            $_current_page = get_page( $current_page );
            _get_post_ancestors($_current_page);
            if ( isset($_current_page->ancestors) && in_array($page->ID, (array) $_current_page->ancestors) )
                $css_class[] = 'current_page_ancestor';
                if ( $page->ID == $current_page )
                    $css_class[] = 'current_page_item';
                elseif ( $_current_page && $page->ID == $_current_page->post_parent )
                    $css_class[] = 'current_page_parent';
            } elseif ( $page->ID == get_option('page_for_posts') ) {
                $css_class[] = 'current_page_parent';
            }

            $css_class = implode( ' ', apply_filters( 'page_css_class', $css_class, $page, $depth, $args, $current_page ) );

            $image = get_field('image_field', $page->ID);

            $output .= $indent . '<li class="' . $css_class . '">' . '<a href="' . get_permalink($page->ID) . '">';
            $output .= '<img src="' . $image['url'] . '" alt="' . apply_filters( 'the_title', $page->post_title, $page->ID ) . '" />' . '</a>';

            if ( !empty($show_date) ) {
                if ( 'modified' == $show_date )
                    $time = $page->post_modified;
                else
                    $time = $page->post_date;

            $output .= " " . mysql2date($date_format, $time);
        }
    }
}

次に、次のようにページ メニューで使用します。

<?php wp_page_menu(array('walker' => new WP_Image_Walker(), 'container' => 'false', 'menu_class' => 'nav-home') ); ?>
于 2014-08-08T07:18:15.007 に答える