如何生成与Elementor模板相同的自定义帖子类型的自动快捷码?

时间:2020-01-21 作者:Nayan Chowdhury

我想为自定义帖子类型生成自动快捷码。这与elementor模板短代码相同。

我有一个名为clients的自定义post类型,有许多客户端。使用自定义模板生成单个客户端帖子类型。现在我想要的是为每个帖子生成自动快捷码。与客户端1类似:[clients name="1"] 对于客户端2:[client name="2"]. 如果我创建了一个新的客户机,短代码将自动生成,并显示在列表中的一个字段中。

我被困住了,没有任何想法。请帮忙。

非常感谢。

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

没有什么可以“生成”。Elementor所做的只是给出一个如何将其短代码用于特定项目的示例。您只需要一个短代码client, 它接受一个参数以确定要显示的客户端:

add_shortcode(
    \'client\',
    function( $atts ) {
        $atts = shortcode_atts( [ \'id\' => null ], $atts, \'client\' );

        if ( $atts[\'id\'] ) {
            $post = get_post( $atts[\'id\'] );

            return $post->post_title;
        }
    }
);
因此,可以使用基本短代码输出给定帖子ID的帖子标题。

这就是您所需要的所有短代码,以便为您的所有客户帖子工作。没有必要为每个帖子生成一些东西。然而,您可能想要做的,听起来像Elementor所做的,是为每个帖子提供一个如何使用短代码的预览,以避免用户自己编写。

要做到这一点,您可以向posts列表表中添加一列。假设您的帖子类型被调用client, 可以使用添加列manage_client_posts_columns:

add_filter(
    \'manage_client_posts_columns\',
    function( $columns ) {
        $columns[\'shortcode\'] = \'Shortcode\';

        return $columns;
    },
    100
);
然后你可以用manage_client_posts_custom_column. 您只需打印以当前帖子ID为前缀的短代码:

add_action(
    \'manage_client_posts_custom_column\',
    function( $column, $post_id ) {
        if ( \'shortcode\' === $column ) {
            echo \'[client id="\' . $post_id . \'"]\';
        }
    },
    10,
    2
);

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。