我目前正在为非营利组织建立一个网站,并且正在使用旧版的Wordpress主题Savior。
自定义帖子类型为Donations,它允许管理员设置不同的“原因”,每个原因都是具有特定ID的帖子。
默认情况下,主题具有自定义的Visual Composer元素(屏幕截图1-https://i.stack.imgur.com/cmhTu.png),可让您使用最新的“原因”;唯一的自定义选项是VC元素的标题。
我正在尝试更新此自定义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 plugin,该主题仅允许您更改整个网站上显示的“原因”,而不能在逐页/逐个基础。我还搜索了Google / StackOverflow并尝试了WP Codex中的各种查询,构建了一个自定义的短代码(自定义VC元素本身是一个自定义的短代码:[stm_causes]
),但它只是显示最新的“原因”。 “
编辑8/7/18:
我已经对Savior主题中的Causes.php模板进行了几次编辑,但是由于某些原因,更新后的WP_Query
循环最终没有提取任何数据(屏幕截图3:https://i.stack.imgur.com/JLibO.png)
唯一的例外是,如果我在VC编辑器后端中省略了任何ID;如果我不输入ID,则默认为最新的Cause。但是,如果我输入任何ID,即使它与最新帖子的ID是相同的,也不会显示任何内容...
你知道我的逻辑怎么了吗?
谢谢!
答案 0 :(得分:0)
render
功能已修复!
$fea_cause = $atts['id'];
$donations = new WP_Query( array( 'post_type' => 'donation', 'posts_per_page' => 1, 'post__in' => array($fea_cause )));
Nilesh Sanura的巨大道具为他提供了帮助!