我在http://codex.wordpress.org/Template_Tags/get_posts找到了这个很棒的代码片段,我编辑了一下以适合我。它有效。
<p>
<?php
$args = array( 'posts_per_page' => 0, 'offset'=> 0, 'category' => 1 );
$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<?php the_title(); ?>
</br>
<?php endforeach;
wp_reset_postdata();?>
</p>
我想将其转换为带有一个可变变量的短代码 - 类别ID。但是,好吧,因为我不知道php,所以我提出的是:
function tytuly_postow($atts) {
extract(shortcode_atts(array(
'id' => 1,
), $atts));
$args = array( 'posts_per_page' => 0, 'offset'=> 0, 'category' => $id );
$q ="<p>
<?php
$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<?php the_title(); ?>
</br>
<?php endforeach;
wp_reset_postdata();?>
</p>";
}
add_shortcode('tytuly','lista_postow');
当然,它不起作用。我使用Karma主题并将其添加到shortcodes.php文件中。请帮助:)
答案 0 :(得分:1)
您拥有的代码肯定是在正确的轨道上。我就是这样做的:
function tytuly_postow( $atts ) {
extract( shortcode_atts( array(
'id' => 1,
), $atts ) );
$posts = get_posts( array(
'posts_per_page' => -1,
'post_status' => 'publish',
'cat' => $id,
) );
$output = '';
if ( $posts ) {
$output .= '<p>';
foreach ( $posts as $post ) {
$output .= apply_filters( 'the_title', $post->post_title ) . '<br />';
}
$output .= '</p>';
}
return $output;
}
add_shortcode( 'tytuly', 'tytuly_postow' );
默认偏移为0,因此您无需将其添加为参数。我将posts_per_page设置为-1。这意味着全部。
由于您只是列出了标题,因此按标题排序可能是有意义的。目前他们将按日期降序排序。
我将输出设置为空字符串并在结尾处返回输出。这意味着无论发生什么,短代码总会返回一些东西,即使这个东西恰好是一个空字符串。
然后我正在检查是否找到了帖子。如果是这样的话,我会在foreach之前和之后添加一个段落标记。这是为了匹配您的原始代码。
最后,它遍历每个帖子并在帖子标题上使用the_title过滤器,然后使用break标记结束每个标题。
答案 1 :(得分:-1)
通过查看Shortcode API和add_shortcode Function Reference,您可以检查函数add_shortcode
的参数是$tag
还是$func
。
因此,要开始修复代码,您需要修复它:
//[tutuly]
function tytuly_postow($atts) {
...
}
add_shortcode('tytuly', 'tytuly_postow');
通过这样做,您将获得短代码的工作结构。现在,你的第二个错误是你的函数需要返回一个值,这就是你的短代码将被转换成什么。为此,您需要使用return
。
编辑:另外,您回复帖子名称的逻辑是错误的,所以我修复了它:
因此,您的固定代码将如下所示:
//[tutuly id="1"]
function tytuly_postow($atts) {
extract(shortcode_atts(array(
'id' => 1,
), $atts));
$args = array(
'posts_per_page' => -1,
'category' => $id,
'post_status' => 'publish'
);
$myposts = get_posts($args);
if ($myposts) {
$q = '<p>';
foreach ($myposts as $post) {
$q .= apply_filters('the_title', $post->post_title) . '<br />';
}
$q .= '</p>';
} else {
$q = '';
}
return $q;
}
add_shortcode('tytuly','tytuly_postow');
posts_per_page
现在设置为-1
以检索所有帖子,
post_status
用于仅检索已发布的帖子。
如果您要检索帖子的链接,而不仅仅是名称,则可以更改此行:
$q .= apply_filters('the_title', $post->post_title) . '<br />';
到
$q .= '<a href=' . get_permalink($post->ID) . '>' . apply_filters('the_title', $post->post_title) . '</a><br />';
请注意,如果您没有足够的编程技能,您可以随时使用真棒GenerateWP Shorcodes Generator。