1

この質問は、コードの整理とコードのより良い管理に関するものですが、PHPに関しては完全な初心者なので、少し助けていただければ幸いです。

私はこのコードを持っています:

<?php
            $thumb_id = get_post_thumbnail_id(get_the_ID()); // gets the post thumbnail ID

            $args = array(
                'order' => 'ASC',
                'orderby' => 'rand',
                'post_type' => 'attachment',
                'post_parent' => $post->ID,
                'post_mime_type' => 'image',
                'post_status' => null,
                'numberposts' => 1,
                'exclude' => $thumb_id
            );

            $attachments = get_posts($args);
            if ($attachments) {
                foreach ($attachments as $attachment) {
                    echo wp_get_attachment_image($attachment->ID, 'full', false);
                }
            }
        ?>

上記のコードは、Wordpressの投稿からランダムな画像を取得し、それらの1つをDIVにランダムに生成します。多くのテンプレートでこの機能が必要ですが、ファイルが乱雑になり、非効率的に大きくなるため、PHPファイルを詰め込みたくありません。

2つの質問。

  1. 関数.php内に配置するために上記のコードを変更する必要がありますか?
  2. 多くの異なるテンプレートで再利用できる短いワンライナーを使用して、上記のコード(functions.php内にあります)を参照するにはどうすればよいですか?
4

2 に答える 2

1

スニペットを関数内の関数に入れてfunctions.php、いくつかのパラメーターを渡して、使用法をより柔軟にすることをお勧めします。

テストされていませんが、これは一連のオプションを取り、デフォルト値を上書きします(たとえば、使用ごとにorderまたはなどを変更する場合)。現在の投稿ではない投稿をクエリする場合はorderby、オプションのパラメータとして、を渡すことができます。 post_id

またreturns、それらを直接出力するのではなく、の配列であり、関数を操作するための好ましい方法と見なすことができます。

// functions.php

function get_random_post_image($options=array(), $post_id=NULL) {
    if($post_id != NULL) :
        $thumb_id = get_post_thumbnail_id($post_id); 
    else :
        $thumb_id = get_post_thumbnail_id(get_the_ID());        
    endif;

    $default_args = array(
           'order' => 'ASC',
           'orderby' => 'rand',
           'post_type' => 'attachment',
           'post_parent' => $post->ID,
           'post_mime_type' => 'image',
           'post_status' => null,
           'numberposts' => 1,
           'exclude' => $thumb_id
         );

    // merge custom options
    $args = array_merge($default_args, $options);


    $attachments = get_posts($args);
            if ($attachments) {
                $images = array();
                foreach ($attachments as $attachment) {
                    $images[] = wp_get_attachment_image($attachment->ID, 'full', false);
                }
                return $images;
            }
            return false; // or, return default image/placeholder
}





// and within your template/posts:
if(function_exists('get_random_post_image')) :
    $images = get_random_post_image(array('order'=>'DESC')); // overwrite `ASC`
    if($images) :
        foreach($images as $img) {
            echo '<div class="post-img"> ' . $img . '</div>';
        }
    else :
       echo 'No images!';
    endif;
endif;

完璧ではありません。しかし、あなたはそれを十分に簡単に拡張することができます。

于 2012-05-28T16:40:51.043 に答える
0

1.を取得する必要があり、<?phpすでに?>コードをこれらのタグ内に配置している場合

例functions.php:

<?php
    blah blah
    ....


    // your code here

        $thumb_id = get_post_thumbnail_id(get_the_ID()); // gets the post thumbnail ID

        $args = array(
            'order' => 'ASC',
            'orderby' => 'rand',
            'post_type' => 'attachment',
            'post_parent' => $post->ID,
            'post_mime_type' => 'image',
            'post_status' => null,
            'numberposts' => 1,
            'exclude' => $thumb_id
        );

        $attachments = get_posts($args);
        if ($attachments) {
            foreach ($attachments as $attachment) {
                echo wp_get_attachment_image($attachment->ID, 'full', false);
            }
        }
// be careful, only one "?>" in the file, no nested "<?php ?>" blocks

?>

2. include()、include_once()、require()、またはrequire_once()を使用して、関数を別のファイルに保存し、そのファイルを参照できるようにします。

random_img.php

<?php
        $thumb_id = get_post_thumbnail_id(get_the_ID()); // gets the post thumbnail ID

        $args = array(
            'order' => 'ASC',
            'orderby' => 'rand',
            'post_type' => 'attachment',
            'post_parent' => $post->ID,
            'post_mime_type' => 'image',
            'post_status' => null,
            'numberposts' => 1,
            'exclude' => $thumb_id
        );

        $attachments = get_posts($args);
        if ($attachments) {
            foreach ($attachments as $attachment) {
                echo wp_get_attachment_image($attachment->ID, 'full', false);
            }
        }
?>

関数.php

<?php
    blah blah
    .... 

    include ("random_img.php")
?>
于 2012-05-28T15:19:26.130 に答える