自定义插件-查询CPT-显示结果

时间:2015-01-27 作者:OldWest

这段代码将进入我正在创建的一个示例插件中,作为使用CPT的测试,并将它们打印到页面上。

我一直在尝试让print\\u r()给我一个对象。自定义过帐类型已过帐验证。数据存储在MySQL中-已验证。因此,post类型正在注册。

请为我提供一双新眼睛,告诉我在查询中缺少什么。

add_action(\'init\', \'all_custom_post_types\');

function all_custom_post_types() {

  $types = array(
    // Pledge Items
    array(\'the_type\' => \'testimonial\',
    \'single\' => \'Testimonial\',
    \'plural\' => \'Testimonials\'));

  foreach ($types as $type) {

  $the_type = $type[\'the_type\'];
  $single = $type[\'single\'];
  $plural = $type[\'plural\'];

  $labels = array(
  \'name\' => _x($plural, \'post type general name\'),
  \'singular_name\' => _x($single, \'post type singular name\'),
  \'add_new\' => _x(\'Add New\', $single),
  \'add_new_item\' => __(\'Add New \'. $single),
  \'edit_item\' => __(\'Edit \'.$single),
  \'new_item\' => __(\'New \'.$single),
  \'view_item\' => __(\'View \'.$single),
  \'search_items\' => __(\'Search \'.$plural),
  \'not_found\' => __(\'No \'.$plural.\' found\'),
  \'not_found_in_trash\' => __(\'No \'.$plural.\' found in Trash\'),
  \'parent_item_colon\' => \'\'
  );

  $args = array(
  \'labels\'             => $labels,
  \'public\'             => true,
  \'has_archive\'        => true,
  \'publicly_queryable\' => true,
  \'show_ui\'            => true,
  \'query_var\'          => true,
  \'rewrite\'            => true,
  \'capability_type\'    => \'post\',
  \'hierarchical\'       => false,
  \'menu_position\'      => 5,
  \'supports\'           => array(\'title\',\'editor\',\'thumbnail\',\'custom-fields\',\'excerpt\'));

register_post_type($the_type, $args);

  }

}

////////////////////////

function testimonials_list() {
    if (is_page(\'9595\')) {

    $the_query = new WP_Query( array(
        \'post_type\' => \'Testimonials\'
) );

while ( $the_query->have_posts() ) :
    $the_query->the_post();
    print_r($the_query);
endwhile;

    }
}

add_action(\'pre_get_posts\',\'testimonials_list\');

2 个回复
SO网友:Privateer

尝试:

    $the_query = new WP_Query( array(
      \'post_type\' => \'Testimonials\'
     ) );
看起来您可能只需要将其更改为:

$the_query = new WP_Query(
    array( \'post_type\' => \'testimonial\' )
);
查看post\\u类型时,需要使用创建它时使用的名称

SO网友:Milo

你目前的问题是pre_get_posts 为请求中的每个查询激发。您正在创建一个无限循环,该循环以致命的内存不足错误终止。如果你enable debugging, 您应该会看到错误消息。

你的testimonials_list 函数为页面上的第一个查询激发,条件is_page(\'9595\') ,然后创建一个新查询,$the_query. 这反过来又会激发相同的testimonials_list 功能,同时满足is_page(\'9595\') 并创建一个新查询。这种情况不断发生,直到PHP内存耗尽。

答案包括额外的检查,如is_main_query(), 和/或remove_action 在操作运行一次后删除该操作。

结束

相关推荐

必须使用插件自动加载器:如何正确使用get_plugins()?

我的autoloader类负责加载必须使用的插件,这些插件不位于mu-plugins 文件夹要定位它们,我需要使用get_plugins() 作用According to Codex, 该函数接受一个参数:$plugin\\u folder(string)(可选):单个插件文件夹的相对路径。我的文件层次结构如下所示:|-- /mu-plugins | |-- autoload.php // only includes wpmu/autoload.php&#