我一直在關注一些在線教程,以在 woocommerce 的“我的帳戶”頁面中創建自定義選項卡。一切順利,接受在自定義選項卡內容中添加短代碼。
注冊自定義選項卡的代碼是這樣的:
//add new tab to my account
function bbloomer_add_premium_support_endpoint() {
add_rewrite_endpoint( 'mijn-elearning', EP_ROOT | EP_PAGES );
}
add_action( 'init', 'bbloomer_add_premium_support_endpoint' );
// 2. Add new query var
function bbloomer_premium_support_query_vars( $vars ) {
$vars[] = 'mijn-elearning';
return $vars;
}
add_filter( 'query_vars', 'bbloomer_premium_support_query_vars', 0 );
// ------------------
// 3. Insert the new endpoint into the My Account menu
function bbloomer_add_premium_support_link_my_account( $items ) {
$items['mijn-elearning'] = 'Mijn Elearnings';
return $items;
}
add_filter( 'woocommerce_account_menu_items', 'bbloomer_add_premium_support_link_my_account' );
// ------------------
// 4. Add content to the new tab
function bbloomer_premium_support_content() {
echo do_shortcode('[dashboard_student]');
}
add_action( 'woocommerce_account_mijn-elearning_endpoint', 'bbloomer_premium_support_content' );
短代碼定義如下:
function dashboard_function($atts = array(),$html = 'test',$name) {
ob_start();
$query = New WP_QUERY( array ('post_type'=>'programma','posts_per_page'=>-1,'meta_query' => array( array( 'key' => 'level', 'value' => 'programma', 'compare' => 'LIKE'),),),);
while($query->have_posts()){
$html .= '<li><a href="'.get_the_permalink.'">'.get_the_title().'</a></li>';
}
$html .= '</ul>';
wp_reset_postdata();
ob_get_clean();
return $html;
}
add_shortcode('dashboard_student','dashboard_function');
function add_to_init() {
add_shortcode('dashboard_student','dashboard_function');
}
add_action('init','add_to_init');
但是,似乎無法在自定義選項卡中進行查詢。它卡住了,即使我完全訪問服務器記憶體,我也會收到致命錯誤:“已用盡 536870912 位元組的允許記憶體大小”(或任何更高的數字)。
有任何想法嗎?
uj5u.com熱心網友回復:
您需要添加the_post()功能。
/**
* Sets up the current post.
*
* Retrieves the next post, sets up the post, sets the 'in the loop'
* property to true.
*
* @since 1.5.0
*
* @global WP_Post $post Global post object.
*/
public function the_post() {
global $post;
$this->in_the_loop = true;
if ( -1 == $this->current_post ) { // Loop has just started.
/**
* Fires once the loop is started.
*
* @since 2.0.0
*
* @param WP_Query $query The WP_Query instance (passed by reference).
*/
do_action_ref_array( 'loop_start', array( &$this ) );
}
$post = $this->next_post();
$this->setup_postdata( $post );
}
我修改了你的代碼。試試下面的代碼。
function dashboard_function($atts = array(),$html = 'test',$name) {
ob_start();
$query = New WP_QUERY(
array(
'post_type' => 'programma',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => 'level',
'value' => 'programma',
'compare' => 'LIKE'
)
)
)
);
$html = '<ul>';
if( $query->have_posts() ) {
while($query->have_posts()){
$query->the_post();
$html .= '<li><a href="'.get_the_permalink().'">'.get_the_title().'</a></li>';
}
wp_reset_postdata();
}
$html .= '</ul>';
ob_get_clean();
return $html;
}
add_shortcode('dashboard_student','dashboard_function');
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/375136.html
標籤:WordPress的 求购
上一篇:在WP中使用子查詢而不是內部連接
