0

さて、私はたくさんのショートコード スニペットを試して、最近の 3 つの投稿を自分の投稿 (ページではなく) にショートコードとして表示しました。

お気に入り:

function posts_shortcode() {
$the_query = new WP_Query(array('posts_per_page' => 3));

// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();
    echo '<li>';
    the_title();
    echo '</li>';
endwhile;

// Reset Post Data
wp_reset_postdata();

}

add_shortcode('posts', 'posts_shortcode'); 

function posts_shortcode() { // From Smashingmagazine
query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 3));
   if (have_posts()) :
      while (have_posts()) : the_post();
         $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';
      endwhile;
   endif;
   wp_reset_query();
   return $return_string;
}

function register_shortcodes(){
   add_shortcode('posts', 'posts_shortcode'); 
}

そしてさえ

function wptuts_recentpost($atts, $content=null){ // From WP Tuts+

    $getpost = get_posts( array('number' => 1) );

    $getpost = $getpost[0];

    $return = $getpost->post_title . "<br />" . $getpost->post_excerpt . "…";

    $return .= "<br /><a href='" . get_permalink($getpost->ID) . "'><em>read more →&lt;/em></a>";

    return $return;

}
add_shortcode('newestpost', 'wptuts_recentpost');

これらはすべて機能していないようです。ループか何かと関係があるのではないかと思います。ループを削除して、次のようなことだけを行うと

return 'hey there';

function() では、問題なく動作します。

何か案は?

編集: 次のショートコードを使用:

function posts_shortcode() { // From Smashingmagazine
query_posts($args);
   if (have_posts()) :
      while (have_posts()) : the_post();
        $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';
      endwhile;
   endif;
   wp_reset_query();
   return $return_string;

}

add_shortcode('posts', 'posts_shortcode');

なんとか結果を得ることができましたが、現在、フロントページへのリンクを含むテキスト Home が表示されています。まず第一に、理由がわかりません..第二に、$args を 'posts_per_page=5' に置き換えると、また消えてしまいます。なんらかの理由でループに問題があると本当に思います..

4

2 に答える 2

1

最初のものは使用しないでください。ショートコード関数内で何もエコーしないでください。

最後の 1 つは 1 つの投稿のみを印刷します。その上、それは array('number' => 1) ではなく、 array('numberposts' => 1) であるべきだと思います。

2番目のものは機能するはずですが、 add_shortcode を関数でラップしているため、ある時点でそれを呼び出す必要があります。たとえば、add_action( 'init', 'register_shortcodes' ); または、add_shortcode を functions.php に入れます。

于 2012-09-01T22:54:37.873 に答える
0

これは私にとってはうまくいっています

add_shortcode( 'objectx-pages-list', 'objectx_pages_list_func' );
function objectx_pages_list_func( $atts ) {
global $post;
ob_start();
extract( shortcode_atts( array('ids' => '1186'), $atts ) );
$id_array = explode(',', $ids); 
$pages_query = new WP_Query( array(
    'post_type' => 'page',
    'post__in' => $id_array,
    'order' => 'ASC',
    'orderby' => 'title',
) );
if ( $pages_query->have_posts() ) { ?>
<div class="carousel-wrapper">
<div class="owl-carousel owl-theme carousel-1" id="carousel-rooms">
<?php while ( $pages_query->have_posts() ) : $pages_query->the_post();
$featured_image = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
?>
<div <?php post_class('item'); ?> id="post-<?php the_ID(); ?>">
    <div class="row">
        <div class="col-md-7">
            <div class="img-rooms">
                <a href="<?php the_permalink(); ?>">
                <img class="img-responsive wp-post-image" src="<?php echo $featured_image; ?>"></a>
            </div>
        </div>
    <div class="col-md-5">
        <div class="detail-rooms">
            <h2 class="title-room "><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <?php the_excerpt(); ?> 
        </div>
    </div>
    </div>
</div>
<?php endwhile; ?>
</div>
</div>
<?php $myvariable_pages = ob_get_clean();
wp_reset_postdata();
return $myvariable_pages;
    }
}

ショートコード

[objectx-pages-list id="15,16,17"]
于 2016-07-25T15:58:13.867 に答える