创建自定义帖子类型的页面选项

时间:2013-02-20 作者:Stelios

我正在创建一个用于创建登录页的插件。

我对登录页使用自定义帖子类型和自定义字段,但我需要为每个条目添加一些页面选项。例如,我需要一个选项(复选框)来隐藏特定登录页上的标题(标题通过WYSIWYG自定义字段编辑)。

我搜索了不同的选项“框架”,发现Redux(https://github.com/ghost1227/Redux-Framework ) 它适用于插件,也使用WordPress设置API。

Redux和我找到的任何其他框架的示例,以及我在网上找到的关于创建设置/选项页面的任何教程,都是针对常规选项的,但我需要在特定自定义帖子类型的编辑屏幕中提供这些选项。

我不是PHP大师,但我正在努力学习,并愿意学习,任何帮助都会得到感谢,或者至少如果有人能为我指出正确的方向,那就太好了。

干杯Stelios

3 个回复
SO网友:chrisguitarguy

你想要的是custom meta box.

搜索这个网站也会给你很多例子,但这里有一个简短的概述。

你陷入了add_meta_boxes 适当地打电话,add_meta_box.

<?php
add_action(\'add_meta_boxes\', \'wpse87567_add_box\');
function wpse87567_add_box($post_type)
{
    // $post_type the "page" on which the `add_meta_boxes` action is being fired
    // It could be commends or could be a post type. It\'s really only
    // useful if you want to dynamically add a meta box everywhere.

    add_meta_box(
        \'wpse87567-box\', // the meta box ID, can be anything
        __(\'A Meta Box\', \'wpse\'), // your meta box title
        \'wpse87567_box_callback\', // the callback, the function that spits our your meta box contents (eg. fields)
        \'landing_page\', // the post type to which you wish to add the meta box
        \'side\', // where should you put it? side, normal, or advanced
        \'low\' // how important is it? high, core, default, or low
    );
}

function wpse87567_box_callback($post)
{
    // post is the current page\'s post object, use it to fetch your additional
    // meta data via `get_post_meta` or the like.

    // spit out your HTML fields here
}
为了保存东西,你需要save_post 并检查以确保您没有进行自动保存,帖子类型匹配,nonces签出,并且当前用户可以实际编辑帖子

<?php
add_action(\'save_post\', \'wpse87567_save\', 10, 2);
function wpse87567_save($post_id, $post)
{
    // make sure we aren\'t doing an autosave
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
        return;
    }

    // check if your post types match: do you need to save...
    if (\'landing_page\' !== $post->post_type) {
        return;
    }

    // If you used a nonce above, and you should have, check it here.


    // See if the current user can edit the post
    // `edit_post` should be whatever capability your post type was
    // registered with. Maybe be `edit_page` or `edit_landing_page`, etc
    if (!current_user_can(\'edit_post\', $post_id)) {
        return;
    }

    // if you\'re here, save stuff.

    if (!empty($_POST[\'some_field_from_the_callback\'])) {
        update_post_meta(
            $post_id,
            \'_your_meta_key\',
            esc_attr(strip_tags($_POST[\'some_field_from_the_callback\']))
        );
    } else {
        delete_post_meta($post_id, \'_your_meta_key\');
    }
}

SO网友:Jen

您正在寻找元框。

法典中有很多关于meta boxes. 查看该页上的示例,并根据需要进行调整。

有很多插件提供类似的功能。我用过WP Alchemy Class 取得了巨大的成功;它非常专注于开发人员,不适合胆小的人。我也涉猎过一些Advanced Custom Fields 插件,它更容易使用,但并不总是做你需要的事情。

SO网友:Dovy

Redux还有一个元盒扩展,可以将面板和元盒连接在一起。。)http://reduxframework.com/extensions/

结束

相关推荐

如何在函数.php中运行循环,根据特定条件发送电子邮件?

到目前为止,如果我在WordPress中将其作为页面运行,则此代码可以正常工作。当我发布带有特定标记的帖子时,我正在尝试发送我的用户电子邮件更新。用户可以选择是否要在其设置页面中接收更新。每次发布帖子时,它都会检查帖子是否有特定的标签。只有一个标签将添加到帖子中</然后检查标记是否与用户设置匹配(第一个用户设置),然后检查用户是否打开了更新。(第二次用户设置)如果一切正常,则应发送电子邮件但如果代码在功能文件中,则不会发送电子邮件。我没有出错,所以我有点卡住了。// check is new pos