按视图列出WordPress中的帖子列表

时间:2015-12-14 作者:Pedro Quezado

我需要一个导致以下情况的代码:<?php while ( have_posts() ) : the_post(); ?> 列表根据查看量,就像只列出热门帖子一样,它会进入表格mh_postmeta, 并根据谁拥有最多view.

inserir a descrição da imagem aqui

工作人员使用“orderby”=>“comment\\u count”根据注释列出,但需要它来搜索另一个表,BUT, 这只能发生在特定类别。。假设你有40个CAT 它应该只列出VIEW 而不是DATE 在里面CAT 3

4 个回复
最合适的回答,由SO网友:Will 整理而成

似乎您已经为视图设置了自定义字段,因为这是一个phpMyAdmin屏幕截图。如果是,您可以使用order_by="post_views_count" 在most中wp_query 基于呼叫。例如:

$args = array(
    \'post_type\' => \'your_post_type\',
    \'orderby\'   => \'meta_value_num\',
    \'meta_key\'  => \'post_views_count\',
);
$query = new WP_Query( $args );

//...and on with the loop
<?php while ( have_posts() ) : the_post(); ?>...
将此行为限制为类别3非常简单,但具体操作方式取决于上下文和模板设置。

更多关于orderby in the WP Codex

SO网友:Bram_Boterham

如果你不想注册你自己的元框:给advanced custom fields a开始。

您可以在侧栏中轻松添加元框(或默认值:在主编辑器屏幕下方)

SO网友:Rarst

与往常一样,WordPress有一个简短的答案和一个完整的答案。:)

简而言之,如果你想要一些功能与类别完全类似的东西,你可以创建一个新的taxonomy. 您可以对其进行大量定制,但WP也会对其进行大量定制,包括为您提供现成的元盒。

然而并非所有类型的数据都适合分类。有些事情更合理,因为后元。。。它没有简单/原生的方式为您提供UI。这就是构建完全定制的元框(或使用第三方插件/框架)的领域。

学习如何获得正确的数据架构是WordPress开发的核心技能之一。很难猜测在你的情况下兔子洞能有多深。我会说,从分类法开始,看看它是如何工作的。

SO网友:jgraup

如果你想要一个元框,这个就可以了。这将取决于您想在其中放置什么以及如何保存/渲染每个字段。

此示例改编自add_meta_box.

if ( is_admin() ) {
    add_action( \'load-post.php\', \'BoxPost::init\' );
    add_action( \'load-post-new.php\', \'BoxPost::init\' );
}

if( ! class_exists(\'BoxPost\')) :
/**
 * The Class.
 */
class BoxPost {

  const SLUG = "boxpost_meta_box_name";
  const NONCE_SLUG = "boxpost_inner_custom_box";
  const NONCE = "boxpost_inner_custom_box_nonce";
  const TEXT_DOMAIN = \'text_domain\';

    /**
     * Hook into the appropriate actions when the class is constructed.
     */
    static public function init() {
        add_action( \'add_meta_boxes\', \'BoxPost::add_meta_box\' );
        add_action( \'save_post\', \'BoxPost::save\' );
    }

    /**
     * Adds the meta box container.
     */
    static public function add_meta_box( $post_type ) {
        $post_types = array(\'post\', \'page\');   //limit meta box to certain post types
        if ( in_array( $post_type, $post_types )) {
            add_meta_box(
                  self::SLUG
                , __( \'BoxPost Headline\', self::TEXT_DOMAIN )
                , \'BoxPost::render_meta_box_content\'
                , $post_type
                , \'advanced\'
                , \'high\' // \'high\', \'core\', \'default\' or \'low\'
            );
        }
    }

    /**
     * Save the meta when the post is saved.
     *
     * @param int $post_id The ID of the post being saved.
     */
    static public function save( $post_id ) {

        /*
         * We need to verify this came from the our screen and with proper authorization,
         * because save_post can be triggered at other times.
         */

        // Check if our nonce is set.
        if ( ! isset( $_POST[ self::NONCE ] ) )
            return $post_id;

        $nonce = $_POST[ self::NONCE  ];

        // Verify that the nonce is valid.
        if ( ! wp_verify_nonce( $nonce, self::NONCE_SLUG ) )
            return $post_id;

        // If this is an autosave, our form has not been submitted,
        // so we don\'t want to do anything.
        if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
            return $post_id;

        // Check the user\'s permissions.
        if ( \'page\' == $_POST[\'post_type\'] ) {

            if ( ! current_user_can( \'edit_page\', $post_id ) )
                return $post_id;

        } else {

            if ( ! current_user_can( \'edit_post\', $post_id ) )
                return $post_id;
        }

        /* OK, its safe for us to save the data now. */

        // Sanitize the user input.
        $mydata = sanitize_text_field( $_POST[\'boxpost_meta_field\'] );

        // Update the meta field.
        update_post_meta( $post_id, \'_boxpost_meta_field_value_key\', $mydata );
    }


    /**
     * Render Meta Box content.
     *
     * @param WP_Post $post The post object.
     */
    static public function render_meta_box_content( $post ) {

        // Add an nonce field so we can check for it later.
        wp_nonce_field( self::NONCE_SLUG, self::NONCE  );

        // Use get_post_meta to retrieve an existing value from the database.
        $value = get_post_meta( $post->ID, \'_boxpost_meta_field_value_key\', true );

        // Display the form, using the current value.
        echo \'<label for="boxpost_meta_field">\';
        _e( \'Description for this field\', self::TEXT_DOMAIN );
        echo \'</label> \';
        echo \'<input type="text" id="boxpost_meta_field" name="boxpost_meta_field"\';
        echo \' value="\' . esc_attr( $value ) . \'" size="25" />\';
    }
}

endif; //BoxPost
要稍后获取值,请执行以下操作:

$value = get_post_meta( $post->ID, \'_boxpost_meta_field_value_key\', true );

相关推荐

WpQuery中的ORDERBY不区分大小写

我正在尝试按字母顺序对自定义帖子进行排序,我刚刚意识到,大写字母的排序要先于小写字母。有两家餐厅以“Cal”和“CAT”开头,并按字母顺序将“CAT”作为第一个返回。以下是我的$参数:$args = array( \'numberposts\' => -1, \'post_type\' => \'chef\', \'meta_key\' => \'restaurant\', \'orderby\' => \'meta_