我目前正在为一家非营利组织建立一个网站,并使用Wordpress主题的旧版本"救世主"。
捐赠有一个自定义的帖子类型,它允许管理员设置不同的"原因",每个原因都是一个带有特定ID的帖子。
默认情况下,主题有一个自定义的Visual Composer元素(屏幕截图1-https://i.stack.imgur.com/cmhTu.png)它允许您展示最新的"原因";唯一的自定义选项是VC元素的Title。
我正在尝试更新此自定义VC元素,以便管理员可以指定他们希望在页面/帖子上显示的"原因"的确切ID,而不是只显示最新的"原因。">
我已经为cause.php模板调整了VC映射,下面评论道:
<?php
class STM_VC_Causes {
function __construct() {
add_action( 'init', array( $this, 'integrateWithVC' ) );
add_shortcode( 'stm_causes', array( $this, 'render' ) );
}
public function integrateWithVC() {
if ( function_exists( 'vc_map' ) ) {
vc_map( array(
'name' => __( 'Causes', STM_DOMAIN ),
'base' => 'stm_causes',
'category' => __( 'STM', STM_DOMAIN ),
'params' => array(
array(
'type' => 'textfield',
'class' => '',
'heading' => __( 'Title', STM_DOMAIN ),
'param_name' => 'title',
'value' => __( 'Our Causes', STM_DOMAIN )
),
/** ========================================
* Qing Custom 8-6-2018
* Allow admin to select Cause to feature
======================================== **/
array(
'type' => 'textfield',
'class' => '',
'heading' => __( 'Cause ID', STM_DOMAIN ),
'param_name' => 'id',
'value' => __( '', STM_DOMAIN )
)
)
) );
}
}
public function render( $atts, $content = null ) {
/** ========================================
* Qing Custom 8-6-2018
* Display selected Cause ID
======================================== **/
$title = '';
$id = '';
extract( shortcode_atts( array(
'title' => '',
'id' => ''
), $atts ) );
$fea_cause = $atts['id'];
$donations = new WP_Query( array( 'post_type' => 'donation', 'posts_per_page' => 1, 'post__in' => $fea_cause ) );
$output = '';
$output .= '<ul class="donation-grid first clearfix">';
while ( $donations->have_posts() ) {
$donations->the_post();
$target_amount = ( get_post_meta( get_the_ID(), 'donation_target', true ) == '' ) ? 0 : get_post_meta( get_the_ID(), 'donation_target', true );
$raised_amount = ( get_post_meta( get_the_ID(), 'donation_raised', true ) == '' ) ? 0 : get_post_meta( get_the_ID(), 'donation_raised', true );
$currency = ( get_post_meta( get_the_ID(), 'donation_currency', true ) == '' ) ? '$' : get_post_meta( get_the_ID(), 'donation_currency', true );
$donors = ( get_post_meta( get_the_ID(), 'donation_donors', true ) == '' ) ? 0 : get_post_meta( get_the_ID(), 'donation_donors', true );
$target_amount_percent = ( $raised_amount / $target_amount ) * 100;
$output .= '<li id="post-' . get_the_ID() . '" class="' . implode( ' ', get_post_class() ) . '">';
$output .= '<div class="donation-thumbnail">';
$output .= '<a href="' . get_the_permalink() . '">';
if ( has_post_thumbnail() ) {
$output .= get_the_post_thumbnail( get_the_ID(), 'thumb-150x150' );
}
$output .= '</a>';
$output .= '</div>';
$output .= '<div class="donation-content">';
$output .= '<h4><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></h4>';
$output .= '<div class="progress_bar"><span style="width: ' . $target_amount_percent . '%;"></span></div>';
$output .= '<div class="donation-stat">';
$output .= '<span><i class="fa fa-child"></i> ' . __( 'Raised', STM_DOMAIN ) . '<br/>' . $currency . $raised_amount . '</span>';
$output .= '<span><i class="fa fa-users"></i> ' . __( 'Donors', STM_DOMAIN ) . '<br/>' . $donors . '</span>';
$output .= '<span><i class="fa fa-thumbs-up"></i> ' . __( 'Goal', STM_DOMAIN ) . '<br/>' . $currency . $target_amount . '</span>';
$output .= '</div>';
$output .= '<div class="donate_now">';
$output .= '<a href="' . get_the_permalink() . '" class="button cause_donate_btn">' . __( 'DONATE NOW', STM_DOMAIN ) . '</a>';
$output .= '</div>';
$output .= '</div>';
$output .= '</li>';
}
$output .= '</ul>';
wp_reset_query();
return $output;
}
}
if( defined( 'WPB_VC_VERSION' ) ){
new STM_VC_Causes();
}
?>
自定义VC元素正确地显示在我的管理后台的网站(屏幕截图2-https://i.stack.imgur.com/zKCgs.png),但我不知道如何让管理员输入的ID显示在前端-不管怎样,它仍然显示最新的"原因"屏幕截图3(https://i.stack.imgur.com/13Qw4.png)只是一个示例截图,显示了当带有自定义VC元素的页面被实时推送时,单个"原因"的样子。
我已经联系了该主题的支持团队,但他们只建议使用Post Types Order WP插件,它只允许您在整个网站上更改显示的"原因",而不允许您在逐页/逐篇的基础上指定它。我还搜索了Google/StackOverflow,并在WP Codex中尝试了各种查询,构建了一个自定义的短代码(自定义VC元素本身就是一个自定义短代码:[stm_causes]
(,但它只显示最新的"Cause">
编辑8/7/18:
我在救世主主题中对causes.php模板进行了几次编辑,但由于某种原因,更新后的WP_Query
循环最终没有引入任何数据(屏幕截图3:https://i.stack.imgur.com/JLibO.png(。
唯一的例外是,如果我在VC编辑器后端省略了任何ID;如果我没有输入ID,它默认为最近的原因。然而,如果我输入任何ID,即使它与最近的帖子相同,也不会显示任何内容。。。
你知道我的逻辑有什么问题吗?
谢谢!
render
函数已修复!
$fea_cause = $atts['id'];
$donations = new WP_Query( array( 'post_type' => 'donation', 'posts_per_page' => 1, 'post__in' => array($fea_cause )));
巨大的道具尼莱什·萨努拉的帮助!