限制每个分类的自定义帖子数量

时间:2018-05-13 作者:Hassan Alvi

我正在使用DevinVinson/WordPress-Plugin-Boilerplate 作为插件的基础,我已经创建了一个自定义帖子类型book 以及与之相关的分类法rack.

我需要的是把每架书的数量限制在10本以内;如果数字超过,则应将帖子另存为草稿并显示错误。。现在就输了。。需要帮助。。

这是我到目前为止所拥有的!

private function define_admin_hooks() {
    $this->loader->add_action( \'save_post\', $plugin_admin, \'save_post\' );
    $this->loader->add_action( \'admin_notices\', $plugin_admin, \'admin_notices\' );
}
我有另一个admin类,其中定义了上述函数

public function save_post( $post_id ) {
    global $post;
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
        return;
    if (isset($_POST[\'post_type\']) && $_POST[\'post_type\'] == \'book\') {
        // If the book is assigned to taxonomy "rack" having more than 10 books, the admin_notices function is to be called
        return;
    }
}

public function admin_notices() {
    if ( ! isset( $_GET[\'YOUR_QUERY_VAR\'] ) ) {
        return;
    }
    ?>
    <div class="error">
        <p><?php _e( \'Max Book limit reached for the selected rack!\', \'odin-lms\' ); ?></p>
    </div>
    <?php
}

2 个回复
SO网友:Casper

对所述职位类型使用普通查询,并检查产生的职位数量是否大于10:

public function save_post( $post_id ) {

global $post;
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
    return;
}
if (isset($_POST[\'post_type\']) && $_POST[\'post_type\'] == \'book\') {
    $max_allowed = 10;

    $terms = get_terms( [\'taxonomy\' => \'rack\'] );
    $terms_ids = wp_list_pluck( $terms, \'term_id\' );

    $args = [
        \'post_type\' => \'book\',
        \'post_status\' => \'published\',
        \'tax_query\' => [
            [
                \'taxonomy\' => \'rack\',
                \'field\' => \'term_id\',
                \'terms\' => $terms_ids
            ]
        ],
        \'numberposts\' => $max_allowed + 1 // just need to retrieve one more than the allowed to know whether it passed the max
    ];

    $posts = get_posts( $args );

    if( count( $posts ) > $max_allowed ) {

        // Assuming this is the right method to remove actions; use the right one otherwise;
        // This is to prevent infinite loop
        $this->loader->remove_action( \'save_post\', $plugin_admin, \'save_post\' );

        $post = [
            \'ID\' => $post_id,
            \'post_status\' => \'draft\'
        ]

        // Update the post with status "draft"
        wp_update_post( $post );

        // Re-add the action
        $this->loader->add_action( \'save_post\', $plugin_admin, \'save_post\' );

    }

}
}

SO网友:Mark Kaplun

在这种特定情况下,最好对错误的配置进行一些处理,而不是试图阻止它的发生,因为如果不从后期编辑页面进行编辑,可能会有太多的方式发生错误。我现在想到的短名单

来自帖子列表的快速编辑来自帖子列表的批量更新任何可能通过xml rpc或rest api进行远程发布的插件都会阻止保存,尤其是对于不使用编辑后屏幕的用户,因为用户不知道保存失败的原因,这将以错误的用户体验结束。

结束

相关推荐

Wordpress Admin Tooltip hooks

我想知道是否有一种方法可以使用Wordpress管理工具提示(灰色和蓝色),当你更新你的Wordpress(3.x)时会显示这些提示。显示新功能。谢谢