Wordpress - wp-query通过PHP / MySQL查询数组中的自定义字段列出帖子

时间:2014-06-11 17:55:41

标签: php mysql arrays wordpress wp-query

我有一个复杂的问题,希望我能够充分解释。我们目前有一个wordpress网站,上面有数百个" Incentive"帖子。这些"激励"帖子包含一个标题为“#34;奖励ID"”的自定义字段。我想显示一页"推荐的奖励措施"基于"激励ID"的列表来自单独表中的PHP / MySQL查询。我可以通过自定义字段创建一个帖子列表" Incentive ID"在自定义页面模板中使用wp_query,如此

<?php 

// args
$args = array(

    'meta_key' => 'Incentive ID',
    'meta_value' => array(20,21),
    'orderby' => 'meta_value_num',
   'order' => 'ASC',
    'post_type' => 'incentives'
);

// get results
$the_query = new WP_Query( $args );

// The Loop
?>
<?php if( $the_query->have_posts() ): ?>
    <ul style="list-style:decimal;">
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile; ?>
    </ul>
<?php endif; ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>

但是,每当我尝试将我的PHP / MySQL查询中的数组插入到&#39; meta_value&#34;场,我的结果好坏参半。有时页面是空白的,有时我会收到一个数组,但它会覆盖整个页面。任何人都可以让我深入了解如何正确使用wp_query根据自定义字段数组填充帖子列表&#34; Incentive ID&#34;值?这是我目前的所有代码

<?php
/**
 * Template Name: Recommended Incentives
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */
get_header(); ?>
<?php $con = mysql_connect("localhost","xxxxx","xxxxxx");
if (!$con) {
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("lighting_incentives", $con);
$user_ID = get_current_user_id();
$result = mysql_query("SELECT FK_T_L_INCENTIVES_ID FROM WAYPOINT_USER_PICKED WHERE WP_RECOMMENDED = 1 AND FK_USER_ID = 31");

$rows = array();    
while($r = mysql_fetch_array($result)) {
    $row[0] = $r[0];
    array_push($rows,$row);
}
mysql_close($con);
?>
<div id="main-content" class="main-content"> 
    <div id="primary" class="content-area">
        <div id="content" class="site-content" role="main">
        <div class='entry-content' style='max-width:1130px; margin-left:372px; padding-right:0px;'><h3 style="text-align:center; font-size:34px; font-family:arial; font-weight:600;">Recommended Incentives</h3>
            <?php 
// args
$args = array(
    'meta_key' => 'Incentive ID',
    'meta_value' => print json_encode($rows, JSON_NUMERIC_CHECK),
    'orderby' => 'meta_value_num',
   'order' => 'ASC',
    'post_type' => 'incentives'
);
// get results
$the_query = new WP_Query( $args );
// The Loop
?>
<?php if( $the_query->have_posts() ): ?>
    <ul style="list-style:decimal;">
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile; ?>
    </ul>
<?php endif; ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>

        </div> 
        </div><!-- #content -->
    </div><!-- #primary -->
</div><!-- #main-content -->
<?php
get_sidebar();
get_footer();

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

为了构建你$rows数组,你可以这样做

while($r = mysql_fetch_array($result)) {
    $row[] = $r[0];
}

您可以使用meta_query获取具有与其相关的特定元值的特定帖子。示例:

$meta_query = array(
    array(
        'key' => 'Incentive ID',
        'value' => $row,
        'compare' => 'IN'
    )
);

$args = array( 
    'post_type' => "incentives",
    'post_status' => 'publish', 
    'meta_query' => $meta_query,
    'orderby' => 'meta_value_num', 
    'order' => 'ASC' 
    );

// get results
$the_query = new WP_Query( $args );

答案 1 :(得分:0)

首次使用WordPress时请不要使用php mysql函数使用$wpdb。 其次,你使用的print json_encode不起作用。 当您尝试通过多个元值进行查询时,请使用meta_query:

// Fill this with the sql result
$id_arrays = array();    
while($r = mysql_fetch_array($result)) {
  $id_arrays[] = $r[0];
}

$args = array(
  'post_type' => 'incentives',
  'orderby' => 'meta_value_num',
  'order' => 'ASC',
  'meta_query' => array(
      array(
        'key' => 'Incentive ID',
        'value' => $id_arrays, // the first ID
        'compare' => 'IN'
     ),
   )
);
$query = new WP_Query( $args );

不确定orderby是否会以这种方式运作,但应该如此。你也看到我正在硬编码前两个条目。在将它们添加到数组之前使其动态循环。

有关详细信息,请参阅: