我有一个复杂的问题,希望我能够充分解释。我们目前有一个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();
非常感谢任何帮助!
答案 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
是否会以这种方式运作,但应该如此。你也看到我正在硬编码前两个条目。在将它们添加到数组之前使其动态循环。
有关详细信息,请参阅: