如何通过元值DESC和发布日期DESC过滤获取以前的帖子功能?

时间:2017-06-28 17:19:00

标签: php wordpress

我的循环显示特色帖子,然后以反向时间顺序显示帖子。

然而,当我使用<?php echo get_previous_post(); ?>时,它会按相反的时间顺序抓取帖子。

如何将过滤器添加到与this类似的上一个帖子功能,而是按照以下数组进行过滤:'orderby' => array( 'meta_value' => 'DESC', 'date' => 'DESC')

代码:

UPDATE:在@sMyles和@JackJohansson的帮助下清理了index.php循环

Index.php循环:

$args = array(
    'posts_per_page'    => - 1,
    'meta_key'          => 'meta-checkbox',
    'orderby'           => array( 'meta_value' => 'DESC', 'date'  =>  'DESC')

);

$posts = new WP_Query( $args );

if($posts->have_posts() ){

    while( $posts->have_posts() ){

        $posts->the_post();

        // Set to content template by default
        $template = 'content';

        // Change template to featured when `is_featured` meta has a value
        if(get_post_meta(get_the_ID(), 'meta-checkbox', 'yes')){
            $template = 'featured';
        }

        // Load template part
        get_template_part( $template, get_post_format() );

    }
}

<小时/> 更新:根据建议,我添加了使用上一个帖子功能的地方

上一篇文章功能

<div id="next-post">
    <?php $prev_post = get_previous_post();
    if(!empty($prev_post)) {
        echo '<a class="next-story" href="' . get_permalink($prev_post->ID) . '">Next Story</a>'; 
        echo '<a class="next-story-title" href="' . get_permalink($prev_post->ID) . '" title="' . $prev_post->post_title . '">' . $prev_post->post_title . '</a>'; 
    } ?>
</div>

<小时/> 精选帖子的功能:

function sm_custom_meta() {
    add_meta_box( 'sm_meta', __( 'Featured Posts', 'sm-textdomain' ), 'sm_meta_callback', 'post' );
}
function sm_meta_callback( $post ) {
    $featured = get_post_meta( $post->ID );
?>

<p>
<div class="sm-row-content">
    <label for="meta-checkbox">
        <input type="checkbox" name="meta-checkbox" id="meta-checkbox" value="yes" <?php if ( isset ( $featured['meta-checkbox'] ) ) checked( $featured['meta-checkbox'][0], 'yes' ); ?> />
        <?php _e( 'Featured this post', 'sm-textdomain' )?>
    </label>

</div>
</p>

<?php
}
add_action( 'add_meta_boxes', 'sm_custom_meta' );

function sm_meta_save( $post_id ) {

    // Checks save status
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ 'sm_nonce' ] ) && wp_verify_nonce( $_POST[ 'sm_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';

    // Exits script depending on save status
    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
        return;
    }

    // Checks for input and saves
    if( isset( $_POST[ 'meta-checkbox' ] ) ) {
        update_post_meta( $post_id, 'meta-checkbox', 'yes' );

    } else {
        update_post_meta( $post_id, 'meta-checkbox', '' );
    }

}
add_action( 'save_post', 'sm_meta_save' );

1 个答案:

答案 0 :(得分:0)

尝试以下args

$args = array(
        'meta_key' => 'meta-checkbox',
        'meta_value' => 'yes',
        'posts_per_page' => -1,
        'order_by'=> 'meta_value',
        'order'=>'ASC'
    );