如何将当前贴子深度打印为更新通知?

时间:2014-05-19 作者:Traveler

我需要找到一个简单的if条件来打印家长当前的帖子深度作为更新通知。函数中的以下代码。php不起作用,它会导致所有帖子的“0”,无论是家长还是孩子。有人能帮忙吗?

global $wpdb;
global $post;
$id = $post->ID;
$depth = $wpdb->get_var("SELECT post_parent FROM $wpdb->posts WHERE ID = \'".$id."\'");
if($depth == \'0\')
    {
function my_admin_notice() {
    ?>
    <div class="updated">
        <p><?php _e( \'Depth is 0!\', \'my-text-domain\' ); ?></p>
    </div>
    <?php
}
add_action( \'admin_notices\', \'my_admin_notice\' );
}

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

您应该将条件包装在函数中,而不是将函数包装在条件中(这也可以防止WordPress加载时代码过早运行时出现错误)。

function my_admin_notice() {
    global $wpdb, $post;

    $depth = $wpdb->get_var(
        $wpdb->prepare( "SELECT post_parent FROM $wpdb->posts WHERE ID = %d", $post->ID )
    );

    if ( $depth == \'0\' ) : ?>

    <div class="updated">
        <p><?php _e( \'Depth is 0!\', \'my-text-domain\' ); ?></p>
    </div>

    <?php
    endif;
}

add_action( \'admin_notices\', \'my_admin_notice\' );

SO网友:MortalViews

当您已经拥有post对象时,无需查询post父id。

您可以直接访问父id:

$parent_id =  $post->post_parent; 
但由于您的目的是获得页面的“深度”,因此需要添加一个循环,直到到达主父级。以计算深度。

Code example:

function my_admin_notice() {
    global $post;

    $parent_id = $post->post_parent;
    $depth = 0;
    while ($parent_id > 0) {
        $parent = get_post($parent_id);
        $parent_id = $parent->post_parent;
        $depth++;
    }
    ?>

    <div class="updated">
        <p><?php _e("Depth is {$depth}! ", \'my-text-domain\'); ?></p>
    </div>
    <?php
}

add_action(\'admin_notices\', \'my_admin_notice\');

结束

相关推荐

Shotcode error on functions

您好,我有一个生成错误的短代码。有人能帮忙吗?add_shortcode(\'do-action\', \'do_action_shortcode\'); function do_action_shortcode($atts, $content = \'\') {   ob_start();   do_action($content);   $out = ob_get_contents();   ob_end_clean();   return $