插件在Gutenberg页面编辑器中回显来自短码功能的文本

时间:2019-01-11 作者:Silvester Vella

我正在创建一个插件,通过自定义分类法加载自定义帖子(餐厅菜单插件)。。我正在通过“init”上的add\\u操作钩子调用main函数(保存所有内容),其中还有一个函数,它使用新的Wp\\u查询加载这些自定义帖子内容。

我向该函数添加了一个短代码,并将其放置在gutenberg小部件编辑器中。内容在餐厅主菜单页面上加载得非常完美,但我也可以在菜单页面的古腾堡编辑器中看到回声。。。。

我做错了什么?

    function benito_generate_menu_posts() {

    $args2 = array(
        \'taxonomy\' => \'item_type\',
        \'orderby\' => \'name\',
        \'order\'   => \'ASC\'
    );

    $types = get_categories($args2);

    function load_post_with_tax($tax_type) {
        $args = array(
            \'post_type\' => \'menu\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'item_type\',
                    \'field\' => \'term_id\',
                    \'terms\' => $tax_type,
                )
            )
        );

        $query1 = new WP_query ( $args );
        while($query1->have_posts()) : $query1->the_post();
        echo \'<div class="menu-thumb">\';
            the_post_thumbnail( );
        echo \'</div>\';
        echo \'<div class="menu-title">\';
            the_title( );
            echo \'</div>\';
        echo \'<div class="menu-content">\';
            the_content( );
        echo \'</div>\';

        endwhile; 
        wp_reset_postdata(); // reset the query
    }


    foreach($types as $type) { 
         load_post_with_tax($type);
    } 





}
add_shortcode( \'get_menu_items\' , \'benito_generate_menu_posts\' );

1 个回复
最合适的回答,由SO网友:WebElaine 整理而成

正如Milo所注意到的,短代码应该return 内容而不是echo正在删除它。所以改变

while($query1->have_posts()) : $query1->the_post();
echo \'<div class="menu-thumb">\';
    the_post_thumbnail( );
echo \'</div>\';
echo \'<div class="menu-title">\';
    the_title( );
    echo \'</div>\';
echo \'<div class="menu-content">\';
    the_content( );
echo \'</div>\';

endwhile; 

   while($query1->have_posts()) : $query1->the_post();
        $div = \'<div class="menu-thumb">\';
        $div .= get_the_post_thumbnail( );
        $div .= \'</div>\';
        $div .= \'<div class="menu-title">\';
        $div .= get_the_title( );
        $div .= \'</div>\';
        $div .= \'<div class="menu-content">\';
        $div .= get_the_content( );
        $div .= \'</div>\';
        return $div;
   endwhile;
(更换echo 具有return 还有任何地方the_something() 将其替换为get_the_something() 所以在最后return是整个输出块。)

相关推荐

浏览器刷新时删除数据库条目,AJAX PHP jQuery

我有一个表单,在通过ajax提交表单时更新数据库表中的列。一切都很好,数据库表列可以获取信息,但一旦刷新浏览器,信息就会从数据库中删除。如果meta\\u值不存在,但meta\\u值也在提交表单时创建的数据库中,则PHP将执行数据库更新。我希望信息保留在数据库中,直到或除非meta\\u值被删除或不存在。任何见解都将不胜感激。PHPadd_action(\'wp_ajax_hide_this\', \'hide_this_by_id\'); add_action(\'wp_ajax_nopriv_