WP_Query 未返回我的自定义帖子类型的任何帖子

问题描述 投票:0回答:1

我第一次尝试创建自定义帖子类型 (tlc_duck),但无法弄清楚为什么 WP_Query 无法找到我的自定义类型的任何帖子。

我在下面包含了我的整个测试插件,因为它已经被精简到尝试学习如何使用自定义帖子类型的基本要素。我很清楚这不是安全的代码,因为它没有对输入进行清理,并且不使用随机数。请不要对代码的这些方面发表评论。

当我单击渲染的短代码中的“添加鸭子”按钮时,我可以在 PHP 错误日志中看到创建新鸭子帖子的代码正在运行。如果我查看 MySQL 数据库中的 wp_posts 表,我可以看到新的 tlc_duck 条目。如果我查看管理页面中的“鸭子帖子”列表,我可以看到新的鸭子条目。所以这部分工作正常。

但是,当我尝试查询以查看所有创建的鸭子的列表(参见第 77-90 行)时,have->posts() 返回 false(我在 PHP 错误日志中看到“没有鸭子”) .

我的猜测是我在注册自定义类型时做错了什么(参见

第31-40行),但我发现关于每个功能的含义的文档有点迟钝......因为它可能很漂亮如果您已经知道这意味着什么,将会很有帮助。

我错过了什么(或搞砸了)?

<?php /** * Plugin Name: TLC Survey Posts * Plugin URI: https://github.com/mikemayer67/tlc-survey-posts * Description: Plugin to understand how custom post types work * Version: 0.0.1 * Author: Michael A. Mayer * Requires PHP: 5.3.0 * License: GPLv3 * License URL: https://www.gnu.org/licenses/gpl-3.0.html */ if( ! defined('WPINC') ) { die; } function tlc_register_post_type() { $labels = array( 'name' => 'Duck Posts', 'singular_name' => 'Duck', 'add_new' => 'New Duck', 'add_new_item' => 'Add New Duck', 'edit_item' => 'Edit Duck', 'new_item' => 'New Ducky', 'view_item' => 'View Duckies', 'search_items' => 'Search Ducks', 'not_found' => 'No Ducks Found', 'not_found_in_trash' => 'No Ducks found in Trash', ); $args = array( 'labels' => $labels, 'has_archive' => false, 'public' => false, 'show_ui' => true, 'show_in_rest' => false, ); register_post_type('tlc_duck',$args); } function tlc_handle_shortcode() { ob_start(); $form_uri = $_SERVER['REQUEST_URI']; ?> <form method=post action='<?=$form_uri?>'> <input type=hidden name=action value=add_duck> <input type=submit value="Add a duck"> </form> <?php $html = ob_get_contents(); ob_end_clean(); return $html; } function tlc_add_duck() { error_log("Add a duck"); $duck_args = array( 'post_content' => 'test duck', 'post_title' => 'ducky duck', 'post_type' => 'tlc_duck', ); error_log(print_r($duck_args,true)); $post_id = wp_insert_post($duck_args,true); error_log("added duck: $post_id"); $qargs = array( 'post_type' => 'tlc_duck', ); $duck_posts = new WP_Query($qargs); if($duck_posts->have_posts()) { while($duck_posts->have_posts()) { $duck = $duck_posts->the_post(); error_log(print_r($duck,true)); } } else { error_log("No ducks"); } } add_action('init','tlc_register_post_type'); add_shortcode('duck-posts','tlc_handle_shortcode'); $action = $_POST['action'] ?? ""; if( $action == 'add_duck') { error_log("Need to add a duck"); add_action('init','tlc_add_duck'); }
    
wordpress custom-post-type wordpress-plugin-creation
1个回答
0
投票
您需要将

post_status

 中的 
publish
 设置为 
wp_insert_post()
,如下所示:

function tlc_add_duck() { error_log("Add a duck"); $duck_args = array( 'post_status' => 'publish', 'post_content' => 'test duck', 'post_title' => 'ducky duck', 'post_type' => 'tlc_duck', ); $post_id = wp_insert_post($duck_args, true); if ( is_wp_error( $post_id ) ) { error_log($post_id); } $qargs = array( 'post_type' => 'tlc_duck', ); $duck_posts = new WP_Query($qargs); if($duck_posts->have_posts()) { while($duck_posts->have_posts()) { $duck = $duck_posts->the_post(); error_log(print_r($duck,true)); } } else { error_log("No ducks"); } }
    
© www.soinside.com 2019 - 2024. All rights reserved.