我正在尝试用jQuery编写一个图像库插件。我使用的是jQuerys$。post AJAX方法,用于从相关post页面发送和接收信息。基本上,每次点击“下一步”按钮时,我都会循环浏览附件并添加一个新图像,直到我使用了所有图像(此时我需要返回一些东西来停止AJAX,但还不知道如何…)。
我读到了一些关于如何做到这一点的非常矛盾的信息。我非常想知道如何从另一个PHP文件访问WP数据和函数。有什么想法吗?我对这件事感到厌倦、压力大,而且通常都是疯了:)
我正在尝试用jQuery编写一个图像库插件。我使用的是jQuerys$。post AJAX方法,用于从相关post页面发送和接收信息。基本上,每次点击“下一步”按钮时,我都会循环浏览附件并添加一个新图像,直到我使用了所有图像(此时我需要返回一些东西来停止AJAX,但还不知道如何…)。
我读到了一些关于如何做到这一点的非常矛盾的信息。我非常想知道如何从另一个PHP文件访问WP数据和函数。有什么想法吗?我对这件事感到厌倦、压力大,而且通常都是疯了:)
正如@MatthewBoynes所言$.post()
请求每个图像可能会带来一些开销。
更好的解决方案可能是抓取并缓存它们,然后使用wp_localize_script()
.
$attachments = get_posts( array(
\'post_parent\' => get_the_ID()
,\'post_type\' => \'attachment\'
,\'posts_per_page\' => -1
#,\'exclude\' => get_post_thumbnail_ID() // only needed if we want to exclude the feat. image
) );
// Hook those to `wp_enqueue_scripts`
wp_register_script(
\'gallery\'
,get_template_directory_uri().\'/js/gallery.js\'
,array( \'jquery\' )
,filemtime( get_template_directory().\'/js/gallery.js\' )
,true
);
wp_localize_script(
\'gallery\'
,\'gallery_object\'
,json_encode( $attachments )
);
然后您可以访问gallery_object
从您的内部~/js/gallery.js
使用.on()
单击处理程序。在这里使用ajax可能不符合您的最佳利益(只有一个例外,请参见下文)。首先,您将创建对服务器的不必要调用来查询每个图像。其次,结果将无法缓存,尤其是在您发出POST请求的情况下(这不是正确的HTTP方法/动词,因为您没有更改任何内容;在您的示例中,您希望使用GET请求[$.get()
在jQuery中,ajax speak],但我跑题了)。第三,它对用户来说会很慢。
最好是在初始页面调用中循环浏览帖子,并将图像URL输出到javascript数组,或者将帖子数组输出为JSON。您还可以循环并输出<img>
标签,但图像将预先加载,而不是根据请求加载(这是否好取决于站点和图像)。我会选择第一个选项,下面是我如何开始的:
<script type="text/javascript">
var my_images = [
<?php
# Here is where you\'ll loop through your attachments
?>
];
</script>
唯一的例外是,如果您有大量图像,例如每页>100张。在这种情况下,您必须找到适当的平衡,并对成批图像进行ajax调用,将您所问的与我上面所建议的结合起来。祝你好运
<ul>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();
$attachments = get_posts( array(
\'post_type\' => \'attachment\',
\'numberposts\' => -1,
\'post_status\' => null,
\'post_parent\' => $post->ID
) );
if ( $attachments ) foreach ( $attachments as $attachment ) : ?>
<li><a href="<?php echo wp_get_attachment_url( $attachment->ID ); ?>"><?php echo apply_filters( \'the_title\', $attachment->post_title ); ?></a></li>
<?php endforeach; ?>
</ul>
我使用以下代码删除中的旧帖子和新帖子链接functions.php 但它仍然显示了它们。 function remove_post_navigation() { remove_action(\'thematic_navigation_below\', \'thematic_nav_below\', 2); remove_action(\'thematic_navigation_above\', \'thematic_nav_above\', 2); }&#x